当天的问候。
我想在特定条件匹配时选择特定元素值。
这是我的代码:
<root>
<companies>
<company id="6">Tata Consultancy Services</company>
<company id="7">Wipro</company>
<company id="8">Infosys</company>
<company id="9">Microsoft</company>
<company id="10">IBM</company>
<company id="11">Apple</company>
<company id="12"> Oracle
<SubCompany>
<company id="12.1">OracleSubCorporation</company>
</SubCompany>
</company>
</companies>
</root>
在这里,我想选择标签值,其值必须是&#34; Oracle&#34;。请注意,每个元素可能有&#34; n&#34;儿童元素的水平。
所以我的XPATH查询是:
/root/companies/company/[normalize-space(text())='Oracle']
但我有错误&#34;无法评估查询&#34;,同时这样做。
我可以知道,如何实现当前的查询。
提前致谢。
答案 0 :(得分:0)
由于额外斜杠,您的表达式无效:
/root/companies/company/[normalize-space(text())='Oracle']
HERE^
演示(使用xmllint
):
$ xmllint test.xml --xpath "/root/companies/company/[normalize-space(text())='Oracle']"
XPath error : Invalid expression
/root/companies/company/[normalize-space(text())='Oracle']
^
xmlXPathEval: evaluation failed
XPath evaluation failure
$ xmllint test.xml --xpath "/root/companies/company[normalize-space(text())='Oracle']"
<company id="12"> Oracle
<SubCompany>
<company id="12.1">OracleSubCorporation</company>
</SubCompany>
</company>
答案 1 :(得分:0)
在公司之后,您的XPath查询中有一个额外的/。谓词([]中的部分)应该是公司元素本身,您正在寻找文本内容为&#39; Oracle&#39;对吗?所以谓词应该在公司元素上:
/root/companies/company[normalize-space(text())='Oracle']
您可以访问所有公司,也可以返回名为“Oracle&#39; Oracle”的子公司。使用:
//companies//company[normalize-space(text())='Oracle']