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]
我曾经有过这种形式;
<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]