【问题标题】:Single XPath for several strings?多个字符串的单个 XPath?
【发布时间】:2019-12-20 15:23:24
【问题描述】:

我正在尝试从没有类的span 中获取值,并且我设法在其中获取值,但我需要一次获取所有值。 这是我的代码:

<span>one</span>
<span>two</span>  
<span>three</span>
<span>four</span>

var headings = document.evaluate("//span[contains(., 'one')]", document, null, XPathResult.ANY_TYPE, 
null );
var thisHeading = headings.iterateNext();

console.log(thisHeading); // Prints the html element in console
console.log(thisHeading.textContent);

它如何在document.evaluate() 中放置多个值,以便我可以打印所有值?

【问题讨论】:

  • Xpath 是一种方法,但如果您想要的只是获取值而使用 xpath 并不重要,您可以尝试使用 getElementsByTagName 获取标记值。您所需要的将是; var headings = document.getElementsByTagName("span"); for (index = 0; index
  • 问题是,我的代码还有其他跨度,我只需要从那些跨度中获取 que 值。

标签: javascript xml xpath


【解决方案1】:

首先你需要使用or来测试多个值[contains(.,'one') or contains(.,'two') or ...]

那么你需要使用迭代器来循环遍历结果

var headings = document.evaluate("//span[contains(., 'one') or contains(.,'two')]", document, null, XPathResult.ANY_TYPE,
  null);
var thisHeading;

while (thisHeading = headings.iterateNext()) {
  console.log(thisHeading); // Prints the html element in console
  console.log(thisHeading.textContent);
}
<span>one</span>
<span>two</span>
<span>three</span>
<span>four</span>

【讨论】:

    【解决方案2】:

    请注意,XPath contains() 检查子字符串;对于字符串相等,对节点的字符串值使用=。见What does contains() do in XPath?

    XPath 1.0

    通过谓词中的or 运算符测试备选方案:

    //span[.='one' or .='two' or .='three' or .='four']
    

    XPath 2.0

    这可以缩短为:

    //span[. = ('one','two','three'.'four')]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 2018-05-02
      • 2022-01-17
      相关资源
      最近更新 更多