XPath 通配符和 contains() 函数用法
Posted
技术标签:
【中文标题】XPath 通配符和 contains() 函数用法【英文标题】:XPath wildcards and contains() function usage 【发布时间】:2011-08-04 04:29:27 【问题描述】:我在使用 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
任何帮助和提示将不胜感激。
【问题讨论】:
那不应该是Data结尾有大写D吗? 我想是的,如果你把第一个字符算作结尾之一...... 对不起,这只是一个例子。大写 D 也不会做任何事情。 【参考方案1】:试试这个:
/doc/Test[contains(Name, "Pre") and Type="Known"]/Data/Name
这是一个用 javascript 实现的工作示例,以利用 ***'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>
【讨论】:
@Jon:谢谢!这是my second XPath answer :) 显然你捡起来比我快;) 我出于同样的原因进行了测试,它成功了。谢谢!我的是 /PlaceSearchResponse/result[contains(name,'Bimeks')]/geometry以上是关于XPath 通配符和 contains() 函数用法的主要内容,如果未能解决你的问题,请参考以下文章