使用XPath选择可选节点

问题描述

我有一个HTML片段:

<td>
   <span class="x-cell">something</span>
   <span class="y-cell">something</span>
   <span class="z-cell">something</span>
   A text
   <span class="foo"/>
   Another text
   <span class="bar"/>
   Also text
</td>

我尝试选择<span class="z-cell"/>之后的所有节点,以将它们移动到另一个节点。但是td中的所有节点都是可选的,我可以有零到三个<span class="*-cell"/>,文本是可选的,并且在文本的中间/开始/结尾可以有另外的<span>个节点是否。

简而言之,我必须将<span class="*-cell"/>以外的所有节点移至另一个节点。我尝试使用XPath选择节点:

td/span[contains(@class,"-cell")][last()]/following-sibling::*

,但如果没有任何<span class="*-cell"/>节点,则它不起作用。我该怎么解决

解决方法

让xpath表达式排除所有不需要的元素:

td/(*[not(contains(@class,"-cell"))]|text())

如果您只想复制没有中间文本的元素,则简化为

td/*[not(contains(@class,"-cell"))]

XPathTester上的实时演示

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...