2016-08-22 7 views
0
<data xmlns:fsd="abc.org" xmlns:xlink="http://www.w3.org/1999/xlink"> 
<meta name="elapsed-time" value="46" /> 
<org-family> 
<family-member id="5"> 
<publication-reference> 
<document-id document-id-type="docdb"> 
<country>US</country> 
<doc-number>3056228</doc-number> 
<date>20160817</date> 
</document-id> 
</publication-reference> 
</family-member> 
<family-member id="2"> 
<publication-reference> 
<document-id document-id-type="docdb"> 
<country>US</country> 
<doc-number>2013315173</doc-number> 
<date>20150430</date> 
</document-id> 
</publication-reference> 
</family-member> 
</org-family> 
</data> 

でのNodeListを、以下の私のJavaコードXPathのJavaの使用してコンパイル - 私は国や日付のノードの値を抽出したい上記のXMLから特定のノード値

NodeList familyMembers = (NodeList) xPath.compile("//family-member//publication-reference//document-id[@document-id-type=\"docdb\"]//text()").evaluate(xmlDocument,XPathConstants.NODESET); 

ArrayList mainFamily = new ArrayList(); 
       for (int i = 0; i < familyMembers.getLength(); i++) { 
        mainFamily.add(familyMembers.item(i).getNodeValue()); 
       } 

が、そのエキス3つのすべてのノード値です(country, doc-number and date)、私は2つのノード値(country and date)だけを必要とし、forループではどのように要求されたノード値を渡すべきですか?

+0

これは有効なXMLではありません - ''と ''は閉じておらず、ルート要素はありません。 – CiaPan

+0

パス式の '//'と '/'演算子の違いを知っていますか? [XML Path Language(XPath) - 2ロケーションパス - 2.5短縮構文](http://www.w3.org/TR/xpath/#path-abbrev)を参照してください。 – CiaPan

+0

@CiaPan:XML文書全体を貼り付けているわけではありませんが、これは特定のセクションです – Prabu

答えて

0

あなたがdocument-idノードを選択すると、//オペレータはそのすべての子孫を選択し、
そしてtext()は、文字列にそれらのそれぞれを変換します。下位ノードの一部だけを処理したい場合は、それをリストします(サブ要素の明示的なシーケンスを構築します)。
//オペレータには、高価な(そしてここでは余計なものを)取り除くこともできます。

"// family-member/publication-reference/document-id [@ document-id-type = \" docdb \ "] /(国、日付)/ text()"

+0

ありがとう、私はしようとしましたが、私は空の結果を得ています – Prabu

+0

おっと、あなたはそうです、XQueryの構文ではなく、 – CiaPan

関連する問題