如何使用XPATH检索具有一个或另一个值的节点

How do I retrieve nodes with one or another value with XPATH

本文关键字:另一个 节点 有一个 何使用 XPATH 检索 具有一      更新时间:2023-09-26

我有一个javascript函数,需要使用document.evaluate通过xpath检索某些节点,到目前为止,我使用的是类似的东西

.//span[contains(@title, 'alerting')] | .//span[contains(@title, 'caution')]

但当要匹配的值更多时,它会变成一个很长的字符串。我不能使用[@title=word],因为我需要检索其atributes包含某些字符串的元素。我试过之类的东西

.//span[contains(@title, ('alerting'|'caution'))]

但它没有检索到任何内容。

你能给我一个缩短第一次犯罪的主意吗?

为什么不创建一个函数来创建字符串并以编程方式构建表达式,而不用担心呢?大致:

function spanContains(s) {
    return ".//span[contains(@title, '" + s + "')]";
}
var contains = [spanContains('word1'), spanContains('word2')].join("|");

您也可以尝试使用matches而不是contains,尽管我不确定它的JavaScript语法是什么,或者是否支持它。

XPath应该是这样的:-

.//span[contains(@title, 'alerting') or contains(@title, 'caution')]
.//span[contains(@title, ('alerting'|'caution'))]

这是无效的XPath--联合运算符|只能具有节点集的参数,而不能具有字符串。

使用

.//span[@title
          [contains(.,'alerting')
         or
           contains(.,'caution') 
          ]
        ]

您可以使用jquery,而不是使用document.evaluate(),在这种情况下您可以执行:

$('span').filter(function() { 
    var title = $(this).attr('title');
    return title != undefined && title.search(/(alerting|caution)/) != -1;
});