javaでxpathを使用して、xmlファイルから属性と値を持つすべての要素を抽出する例を誰かが提供できますか?
ありがとう
私はこれを数年前に私のチームのために書きました。役に立ちます。
XPath には、要素、属性、テキスト、名前空間、処理命令、コメント、およびドキュメント (ルート) ノードの 7 種類のノードがあります。XML ドキュメントは、ノードのツリーとして扱われます。ツリーのルートは、ドキュメント ノード (またはルート ノード) と呼ばれます。
次の Xml ドキュメントについて考えてみましょう。
<information>
<person id="1">
<name>Tito George</name>
<age>25</age>
<gender>Male</gender>
<dob>
<date>25</date>
<month>october</month>
<year>1983</year>
</dob>
</person>
<person id="2">
<name>Kumar</name>
<age>32</age>
<gender>Male</gender>
<dob>
<date>28</date>
<month>january</month>
<year>1975</year>
</dob>
</person>
<person id="3">
<name>Deepali</name>
<age>25</age>
<gender>Female</gender>
<dob>
<date>17</date>
<month>january</month>
<year>1988</year>
</dob>
</person>
</information>
ドキュメントから情報を取得する
DocumentBuilderFactory domFactory = DocumentBuilderFactory.newInstance();
//Getting the instance of DocumentBuilderFactory
domFactory.setNamespaceAware(true);
//true if the parser produced will provide support for XML namespaces;
DocumentBuilder builder = domFactory.newDocumentBuilder();
//Creating document builder
Document doc = builder.parse("C:\\JavaTestFiles\\persons.xml");
XPath xpath = XPathFactory.newInstance().newXPath();
//getting instance of xPath
expr = xpath.compile("//@id");
result = expr.evaluate(doc, XPathConstants.NODESET);
NodeList nodes = (NodeList) result;
for (int i = 0; i < nodes.getLength(); i++) {
System.out.println(nodes.item(i).getNodeValue());
}
上記の赤の行は、xPath 式のコンパイルに使用される行であり、//@id は実際の式です。式 //@id が返され、ドキュメント内の属性 id の値が返されます。すなわち。プログラムの出力は 1 2 および 3 になります。以下の表では、このドキュメントで使用できるさまざまな式を見つけることができます。
上記のコード スニペットの 2 つの重要なステートメントは次のとおりです。
基本的に: XML ドキュメントは、ツリー構造 (階層) のノードのコレクションです。階層ディレクトリ構造と同様に、階層内の特定のノードを指すパスを指定すると便利です (したがって、仕様の名前: XPath)。
実際、ディレクトリ パスの表記の多くはそのまま引き継がれています。
この XPath 式"//*"
をこのように使用します
Document doc = ... // the document on which apply XPath
XPathExpression xp = XPathFactory.newInstance().newXPath().compile("//*");
NodeList elements = (NodeList) xp.evaluate(doc, XPathConstants.NODESET);
あらゆるレベルのすべての要素を返します。