2016-07-22 95 views
2

我的XML文件为什么我的XPath不选择任何东西?

<classifications> 
    <classification sequence="1"> 
    <classification-scheme office="" scheme="CS" /> 
    <section>G</section> 
    <class>01</class> 
    <subclass>R</subclass> 
    <main-group>33</main-group> 
    <subgroup>365</subgroup> 
    <classification-value>I</classification-value> 
    </classification> 
    <classification sequence="2"> 
    <classification-scheme office="" scheme="CS" /> 
    <section>G</section> 
    <class>01</class> 
    <subclass>R</subclass> 
    <main-group>33</main-group> 
    <subgroup>3415</subgroup> 
    <classification-value>A</classification-value> 
    </classification> 
    <classification sequence="1"> 
    <classification-scheme office="US" scheme="UC" /> 
    <classification-symbol>324/300</classification-symbol> 
    </classification> 
    <classification sequence="2"> 
    <classification-scheme office="US" scheme="UC" /> 
    <classification-symbol>324/307</classification-symbol> 
    </classification>   
</classifications> 

我想与以下所需的所有classification-symbol元素值条件 与条件一起office="US"

我试着用下面的XPath解析值,

NodeList usClassification = (NodeList)xPath.compile("//classifications//classification//classification-scheme[@office=\"US\"]//classification-symbol//text()").evaluate(xmlDocument, XPathConstants.NODESET); 

但我得到一个空的结果集,

System.out.println(usClassification.getLength()); //its becomes zero 
+1

尽量避免以这种方式滥用“//”。这是一种懒惰的习惯,当你在相同的路径上执行四次时,它会严重伤害到性能,尤其是当源文档很大时。 –

+0

正确,尤其是因为'//'(选择后代)和'/'(选择直接子元素)之间的功能差异与您的XML无关。 – kjhughes

回答

3

此XPath(写上两行方便阅读),

/classifications/classification[classification-scheme/@office='US'] 
       /classification-symbol/text() 

将选择classification-symbol文本classification元素与到USclassification-scheme@office属性值等于:

324/300 
324/307 

作为热曲相关捐资。

+0

谢谢改变了xpath的工作 – Prabu

3

classification-symbol不是classification-scheme的小孩 - 他们是兄弟姐妹。使用following-sibling轴从“计划”到“符号”,而不是获得:

//classifications/classification/classification-scheme[@office=\"US\"]/following-sibling::classification-symbol/text() 
+0

这是一种同样适用的替代方法(+1)。 – kjhughes

相关问题