问题描述
|
我在使用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>
所以我想做的是返回<Data>
节点内的所有<Name>
文本,并遵循以下条件:
doc//Test/Name
应包含\“ Pre \”文字
doc//Test/Type
应该是“已知”
我需要的是这样的查询,但到目前为止我无法管理它
/doc//Test[Name contains(.,\'Pre\') and Type=\'KNown\']/data//Name
任何帮助和提示将不胜感激。
解决方法
尝试这个:
/doc/Test[contains(Name,\"Pre\") and Type=\"Known\"]/Data/Name
这是一个使用Javascript实现的工作示例,以利用StackOverflow的Runnable代码段
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>