XPath多类型子代

4

我有这个xpath:

.//*[@id='some_id']/td//div

现在我想选择 div 元素下所有特定类型的子元素,比如所有的 label 或 span。类似这样:

.//*[@id='some_id']/td//div/(label|span)/.......

但是这不是有效的xpath。我该怎么做(在不为给定的2个子类型编写两个完整的xpath的情况下)


.//*[@id='some_id']/td//div/*[self::label or self::span] - splash58
您提供的路径(td/div/(label|span))在XPath 2.0中是有效的,但在XPath 1.0中无效。如果您只对1.0感兴趣,请将您的问题标记为“XPath 1.0”。 - Michael Kay
2个回答

6

descendant:: 表示在所有下级层级中查找,如果只要查找子级,请使用

.//*[@id='some_id']/td//div/*[self::label or self::span]

4

您需要使用

descendant::

来选择特定元素的子元素。请看下面的例子:

.//*[@id='some_id']/td//div/descendant::label[@class='some-class']

以上Xpath将获取所有类名为“some-class”的标签,实际上它是“.//*[@id='some_id']/td//div/”元素的子元素。

要查找多个子元素,请使用以下Xpath:

.//*[@id='some_id']/td//div/descendant::*[local-name()='label' or local-name='span']

descendant(后代)指涵盖了子元素、孙元素以及所有其他的后代,而不仅仅是子元素。结果可能会有一些不需要的标签。 - Worse_Username

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接