我在使用XPath时遇到问题并包含函数。想象一下下面的XML示例:
<doc>
<Test>
<Name>1 Pre Histoy</Name>
<Type>Known</Type>
<Data>
<Name>Dinasor</Name>
<Name>Fish</Name>
</Data>
</Test>
<Test>
<Name>1 Post Histoy</Name>
<Type>Known</Type>
<Data>
<Name>Human</Name>
<Name>Dog</Name>
</Data>
</Test>
<Test>
<Name>1 Post Histoy</Name>
<Type>UNKNOWN</Type>
<Data>
<Name>Human</Name>
<Name>Dog</Name>
</Data>
</Test>
</doc>
所以我要做的是返回<Name>
节点内的所有<Data>
文本,并遵循以下标准:
doc//Test/Name
应包含“Pre”文字
doc//Test/Type
应为“已知”
我需要的是这样的查询,但到目前为止我无法管理
/doc//Test[Name contains(.,'Pre') and Type='Known']/data//Name
任何帮助和提示将不胜感激。
答案 0 :(得分:17)
试试这个:
/doc/Test[contains(Name, "Pre") and Type="Known"]/Data/Name
这是一个在Javascript中实现的工作示例,以利用StackOverflow's Runnable Code Snippets
function fu(path){
var output = "";
var results = document.evaluate(path, document, null, XPathResult.ANY_TYPE , null);
while(nextResult = results.iterateNext()){ output += nextResult.outerHTML + "\n"; }
return output;
}
document.body.innerText = fu('//doc/Test[contains(Name, "Pre") and Type="Known"]/Data/Name');
<doc>
<Test>
<Name>1 Pre Histoy</Name>
<Type>Known</Type>
<Data>
<Name>Dinasor</Name>
<Name>Fish</Name>
</Data>
</Test>
<Test>
<Name>1 Post Histoy</Name>
<Type>Known</Type>
<Data>
<Name>Human</Name>
<Name>Dog</Name>
</Data>
</Test>
<Test>
<Name>1 Post Histoy</Name>
<Type>UNKNOWN</Type>
<Data>
<Name>Human</Name>
<Name>Dog</Name>
</Data>
</Test>
</doc>