2012-01-08 20 views
0

が含まれて?たとえば、このxmlファイルの場合:XML解析は、使用してインライン解析

<request method="POST" url="/devices/test/planner" body="*"> 
    <response statusCode="200"> 
    <header> 
     <headerParameters> 
     <headerParameter name="Content-Type">Content-Type=application/xml</headerParameter> 
     </headerParameters> 
    </header> 
    <body>booking created!</body> 
    </response> 
</request> 

データを簡単に抽出するにはどうすればよいですか? また、インライン行からデータを抽出するにはどうすればよいですか?

<request method="POST" url="/devices/test/planner" body="*"> 

ありがとうございます。

+3

あなたは何を試してみましたか? – home

+0

あなたはこれまでに何を試しましたか?あなたはちょうどあなたが使用しようとするクラスを言った。 「インライン行のデータ」とはどういう意味ですか? – dty

+0

私はtutorielsを数えるいくつかのlibreriesを使ってみましたが、解析するだけで管理できました。すべてのチュートリアルでは、別のライブラリを使用しています。私は必要なものすべてをカバーするものを手に入れます(または、おそらく私が使用できるAPIを理解することはできません)。 –

答えて

2

私はXPathの使用を推奨しています。手動でDOMをトラバースすることはできますが、なぜですか? XPathはこの問題を解決するために設計されました。ここで(サンセリフエラーチェックおよび例外処理)完全なJava/JAXP/XPathの例です:

import java.io.IOException; 
import java.io.StringReader; 
import javax.xml.parsers.*; 
import javax.xml.xpath.*; 
import org.w3c.dom.Document; 
import org.w3c.dom.Node; 
import org.xml.sax.InputSource; 
import org.xml.sax.SAXException; 

public class Xpather { 
    public static void main(String[] args) 
      throws XPathExpressionException, ParserConfigurationException, 
      SAXException, IOException { 
     DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder db = dbf.newDocumentBuilder(); 
     Document doc = db.parse(new InputSource("workbook.xml")); 
     XPath xpath = XPathFactory.newInstance().newXPath(); 
     Node body = (Node) xpath.evaluate("/request/response/body", doc, 
       XPathConstants.NODE); 
     System.out.println(body.getTextContent()); 
     Node url = (Node) xpath.evaluate("/request/@url", doc, 
       XPathConstants.NODE); 
     System.out.println(url.getNodeValue()); 
    } 
} 

このコードは、body要素とrequest要素にurl属性の値の内容を出力します。

出力:

予約を作成!

/デバイス/テスト/プランナー

1

XPathを使用すると、standard Java APIsからも容易に入手できます。 Documentを取得したら、JavaのXPathを直接評価することができます。そのため、DocumentBuilderなどを使用することができます。

たとえば、/request、またはリクエストのURLを使用して/request/@urlなどを使用して、<request/>要素のみを取得できます。

代わりに、特に、同じスキーマに従った多くのドキュメントを処理する可能性のある高性能の使用シナリオでは、SAX解析を使用して、処理されるXML要素ごとにイベントを受け取り、属性のリスト

+2

StAXが近づいたので、SAXより良い選択となる。 (これはまた、非常にあいまいな勧告です。) – millimoose