2012年8月15日水曜日

XMLの特定のタグを文字列として抽出する方法(using jdom)




最近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 件のコメント:

コメントを投稿