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>

所以我想要做的是返回 &lt;Data&gt; 节点内的所有 &lt;Name&gt; 文本,具有以下条件:

    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() 函数用法的主要内容,如果未能解决你的问题,请参考以下文章

xpath常用函数

xpath和contains模糊匹配

XPATH的几个常用函数

xpath中怎样用变量

如何在 XPath“包含”函数中使用正则表达式

在Selenium Webdriver中使用XPath ContainsSibling函数定位