xpath兄弟不是元素时如何获取文本

xpath how to get text when the brother is not an element

我曾经有过这种形式;

<li>
    <span>name:</span>
    <p>Seca </p>
</li>

我使用这个 xpath 来获取 seca:

ul/li/span[normalize-space(text())='name:']/following-sibling::p[1]/text())

一切正常。

现在 我没有 p 标签。所以我只有这个:

<li>
    <span>name:</span>
    Seca
</li>

我现在应该对我的代码进行哪些编辑才能获得 seca

现在,"Seca" 只是 li 元素的另一个子元素 - 因此是 span 元素的后续兄弟元素。使用

//ul/li/span[normalize-space(text())='name:']/following-sibling::text()

给你

[EMPTY LINE]
Seca
[EMPTY LINE]

您可能想要排除那些只有空格的行:

normalize-space(//ul/li/span[normalize-space(text())='name:']/following-sibling::text())

结果将是

Seca

如果您的实际输入包含更多文本节点,请不要忘记将 [1] 添加到表达式中。


请注意,如果实际上没有理由规范化 span 的文本内容并仅考虑其直接子文本节点,表达式可能会容易得多:

//ul/li[span='name:']/text()[2]