xml XPath 通配符和 contains() 函数用法
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/5640737/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
XPath wildcards and contains() function usage
提问by Saeid Yazdani
I have a problem using XPath and contains function. Imagine the XML example below:
我在使用 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>
So what I want to do is returning all <Name>texts within <Data>node, with following criteria:
所以我想要做的是返回节点<Name>内的所有文本<Data>,具有以下条件:
doc//Test/Nameshould contain "Pre" textdoc//Test/Typeshould be "Known"
doc//Test/Name应该包含“Pre”文本doc//Test/Type应该是“已知”
What I need is a query like this but so far I couldn't manage it
我需要的是这样的查询,但到目前为止我无法管理它
/doc//Test[Name contains(.,'Pre') and Type='Known']/data//Name
Any help and tips will be appreciated.
任何帮助和提示将不胜感激。
回答by BoltClock
Try this:
尝试这个:
/doc/Test[contains(Name, "Pre") and Type="Known"]/Data/Name
Here is a working example implemented in Javascript to take advantage of StackOverflow's Runnable Code Snippets
这是一个在 Javascript 中实现的工作示例,以利用StackOverflow 的 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>

