最近Webサービスをたくさん利用してXMLの使用頻度が高くなっています。
そうするうちに、自然とjavaでXML parserを内蔵していのです。
パッケージjavax.xml子のクラスは、まさにこのようなXMLをサポートするためのjava側の努力でしょう。
しかし、DOM / SAX parseを使用してデータ処理は問題なく遂行することがありますが、
特定のタグを含む子要素を文字列として取得する部分については、サポートをしていません。
このような時利用できるのがjdomです。
テストXMLは次のとおりです。
http://schemas.xmlsoap.org/soap/envelope/ \>
上記のXMLからdataタグだけが持って来ることがミッションだろう。
作業手順としては
1)java parseを使用してDocumentを生成します。(org.w3c.dom.Document)
2)Documentから必要なタグだけをobjectに抽出します。(doc.getElementsByTagName(タグ名)を利用 - >この関数は、NodeListと呼ばれる束を返します。
3)NodeListオブジェクトでitem(インデックス)関数を使って目的のElementを取得します。(このElementがorg.w3c.dom.Elementています。)
4)org.w3c.dom.Elementオブジェクト(ele)をjdomの
DOMBuilder b = new DOMBuilder();
org.jdom.Element element = b.build(ele);
build関数を使ってorg.w3c.dom.Elementオブジェクトをorg.jdom.Elementに変換します。
5)org.jdom.output.XMLOutputterを利用して出力を準備します。
XMLOutputter out = new XMLOutputter();
6)output関数を使って任意の出力ストリームに出力します。
out.output(element、System.out);
- >ここで、出力ストリームを利用するので、ByteArrayOutputStreamを使用すると、データをバッファに入れて使用をすることができるでしょう。しかし、本ス上ではSystem.outに指定をして標準出力に出力のみになります。
################################################## #######################
完全なソース
import javax.xml.parsers。*;
import java.io. *;
import org.jdom.input.DOMBuilder;
import org.jdom.output.XMLOutputter;
import org.w3c.dom。*;
public class XmlTest {
public static void main(String [] args)throws Exception {
String data = "";
data + = "http://schemas.xmlsoap.org/soap/envelope/ \"> ";
data + = "";
data + = "";
data + = "";
data + = "";
byte [] buffer = data.getBytes();
ByteArrayInputStream bai = new ByteArrayInputStream(buffer);
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document doc = builder.parse(bai);
NodeList list = doc.getElementsByTagName( "data");
System.out.println(list.getLength());
Element ele = null;
if(list.getLength()> 0){
ele =(Element)list.item(0);
System.out.println( "list:" + ele);
}
DOMBuilder b = new DOMBuilder();
org.jdom.Element element = b.build(ele);
System.out.println( "ret:" + element.getText());
XMLOutputter out = new XMLOutputter();
out.output(element、System.out);
}
}
################################################## ##################
出力結果
list:[data:null]
ret:
################################################## ##################
結論:XMLをparserを使用して作業をしている場合、XML内のデータを文字列として取得する必要がある場合には、jdomを利用して上記のソースを参照して作業をすれば可能です。
jdomサイト:http://www.jdom.org/
0 件のコメント:
コメントを投稿