xpath使用java编译 - 具有特定节点值的NodeList

时间:2016-08-22 10:28:47

标签: java dom xpath xml-parsing

<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>

从上面的xml我想提取国家和日期节点值,下面是我的java代码

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());
                }

但它提取了所有三个节点值(country, doc-number and date),但我只需要两个节点值(country and date),在for循环中我应该如何传递请求的节点值?

1 个答案:

答案 0 :(得分:0)

选择document-id节点后,//运算符选择其所有后代,
然后text()将每个转换为字符串。如果你只想处理一些下降节点,只需列出它们(构建一个明确的子元素序列) 你也可以摆脱昂贵的(和多余的!)//运营商 尝试用
替换查询     &#34; // family-member / publication-reference / document-id [@ document-id-type = \&#34; docdb \&#34;] /(country,date)/ text()&#34 ;