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

发布于 2025-01-08 19:19:32 字数 397 浏览 0 评论 0原文

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

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

但是当要匹配的值更多时,它会变成一个非常长的字符串。我不能使用 [@title = word],因为我需要检索属性包含某些字符串的元素。我已经尝试过类似的事情

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

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

你能给我一个缩短第一个语法的想法吗?

I have a javascript function that needs to retrieve certain nodes through xpath using document.evaluate, till now I am using something like

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

But it turn in a very long string when values to match are more. I cannot use [@title = word], because I need to retrieve the elements whose atributes contains some string. I have tried things like

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

But it does not retrieve anything.

Can you give me an idea to shorten the first sintax?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

开始看清了 2025-01-15 19:19:32

为什么不直接创建一个函数来创建字符串并以编程方式构建表达式,而不用担心它呢?粗略地说:

function spanContains(s) {
    return ".//span[contains(@title, '" + s + "')]";
}

var contains = [spanContains('word1'), spanContains('word2')].join("|");

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

Why not just create a function that creates the string and build the expression programmatically, and not worry about it? Roughly:

function spanContains(s) {
    return ".//span[contains(@title, '" + s + "')]";
}

var contains = [spanContains('word1'), spanContains('word2')].join("|");

You could also try using matches instead of contains, although I'm not sure what the JavaScript syntax for that would be, or if it's supported.

假情假意假温柔 2025-01-15 19:19:32

XPath 应该是这样的:-

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

XPath should be this way:-

.//span[contains(@title, 'alerting') or contains(@title, 'caution')]
小清晰的声音 2025-01-15 19:19:32
.//span[contains(@title, ('警报'|'警告'))]

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

使用

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

This is invalid XPath -- the union operator | can only have arguments that are node-sets -- not strings.

Use:

.//span[@title
          [contains(.,'alerting')
         or
           contains(.,'caution') 
          ]
        ]
梦魇绽荼蘼 2025-01-15 19:19:32

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

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

Instead of using document.evaluate(), you could use jquery in which case you could do:

$('span').filter(function() { 
    var title = $(this).attr('title');
    return title != undefined && title.search(/(alerting|caution)/) != -1;
});
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文