Loading [MathJax]/extensions/tex2jax.js

2010-12-01

GWTでXMLを扱う ~クライアントサイド編~

GWTでのXMLプログラミングについて基本のところを書いてなかったので、、、今回は、クライアントサイド編です。クライアントサイドでの操作は、JavaScriptでの操作とほぼ同じになるのでそんなに難しく考える必要はないでしょう。利用するクラスは、 com.google.gwt.xml.clientパッケージを利用します。importする際には間違えないようにしましょう。

gwt.xmlファイルに以下の記述を追加してください。
<inherits name="com.google.gwt.xml.XML"></inherits>
view raw gwtxml.gwt.xml hosted with ❤ by GitHub
操作するXMLファイル
<message>
<from username="OCHI"></from>
<to username="OCHI1"></to>
<to username="OCHI2"></to>
<msg>よろしくー</msg>
<sbody><data>子供のデータ</data><data>子供のデータ2</data></sbody>
</message>
view raw xmlSample.xml hosted with ❤ by GitHub
Javaのコードは以下のようになります。基本的な使い方のパターンを挙げています。前提として、stringXML変数に上述のXMLデータが入っているものとします。
// XML形式の文字列情報をXMLDocumentクラスに格納
Document doc = XMLParser.parse(stringXML);
//ターゲットノードが一つの場合
Node fromNode = doc.getElementsByTagName("from").item(0);
String sfrom = ((Element) fromNode).getAttribute("userName");
Window.alert(sfrom);
//ターゲットノードが複数ある場合
NodeList toNodeList = doc.getElementsByTagName("to");
int num =toNodeList.getLength();
Element ele;
for(int i=0;i<num;i++){
//Attributeを取り出す場合はElementとして扱う
ele =(Element)toNodeList.item(i);
Window.alert(ele.getAttribute("userName"));
}
// Nodeの値を取り出す場合
Node msgNode= doc.getElementsByTagName("msg").item(0);
String sMsg=msgNode.getFirstChild().getNodeValue();
Window.alert("msg:"+sMsg);
//あるノードの子ノードの値を取ってくる場合
Node bodyNode= doc.getElementsByTagName("sbody").item(0);
NodeList childs=bodyNode.getChildNodes();
num =childs.getLength();
Window.alert("数:"+num);
for(int i=0;i<num;i++){
Node test= childs.item(i);
Window.alert("child:"+test.getFirstChild().getNodeValue());
}
注意点ですが、他のXMLパーザーと同様に子ノードを取ってくる際には、改行が入ってくると子ノードの個数が変わってきます。具体的に言うと、上記のXMLではsbosyタグの子ノードは2つとなりますが、これらに改行が入ってくると、改行がテキストノードとしてカウントされます。たいていのXMLドキュメントには改行は入ってないと思いますが、気をつけてください

0 件のコメント:

コメントを投稿