gpt4 book ai didi

html - 使用 XPath 遍历?

转载 作者:太空宇宙 更新时间:2023-11-03 17:30:14 25 4
gpt4 key购买 nike

我正在寻找一种使用 xpath 获取内容的更快方法。

我读了这篇文章:
Selecting a css class with xpath

将第一个响应“class”选择器放在我的元素中,as..

//*[contains(concat(" ", normalize-space(@class), " "), " attr-price ")]

效果很好。它向我返回所有具有“attr-price”类的元素,我什至可以通过做...来做复合选择器之类的事情..

//*[contains(concat(" ", normalize-space(@class), " "), " attr-price second-class")]

但是,我不喜欢的部分是//*。这使得 XPath 遍历所有节点,并且显着降低了我的站点性能。我在 W3schools 上阅读了有关不同类型的选择器的信息,并尝试使用/和//而不是//*,但是这些都不起作用。 attr-price 元素都在 <ul> 内想做一些类似的事情..

/ul/[contains(concat(" ", normalize-space(@class), " "), " attr-price ")]

这样我就找到了每个 UL 而不是每个元素,然后在那里搜索我的类,有点像我使用 jQuery 的

$('ul').find('.attr-price')

欢迎任何意见,谢谢。

最佳答案

XPath 等同于

$('ul').find(...)

会是

//ul//...

所以你的 XPath 会变成

//ul//*[contains(concat(" ", normalize-space(@class), " "), " attr-price ")]

我猜这是否真的更快取决于 XPath 处理器和 DOM 模型实现。

换句话说,你的复合选择器

//*[contains(concat(" ", normalize-space(@class), " "),
" attr-price second-class")]

仅当类属性恰好包含这两个类时才有效以正确的顺序。如果你想要一个不依赖于类列出顺序的复合选择器(因为它不会在 CSS 中),你需要使用像

//*[contains(concat(" ", normalize-space(@class), " "), " attr-price ")
and contains(concat(" ", normalize-space(@class), " "), " second-class ")]

这很笨重。请记住,如果您可以访问 XPath 2.0,则可以改用 tokenize()。为此,请参阅 https://stackoverflow.com/a/12165195/423105

关于html - 使用 XPath 遍历?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30740406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com