这个问题已有很多答案,但没有一个真正解释这个问题.首先,在转向真正的问题之前,让我们先解开关于自闭合元素的初步困惑:不,这不是一个像元素一样的问题
没有标签.没有必要指出它的结束位置,因为
/>
已经告诉您该元素不包含任何内容并在此时关闭.
那么我们只看一下你展示的文档的片段:
Project Updated
一个XPath表达式(请注意,很可能你不需要.
在表达式的最开头):
//*[@id='project-update-success-information']
将返回内部div
元素及其包含的所有内容.它包含的内容完全按以下顺序排列:
仅限空格的文本节点
一个自闭span
元素,没有属性以外的内容
包含"Project Updated"的文本节点
因此,当您选择内部div
和使用时.getText()
,结果中最终会有2个文本节点,这一点都不足为奇.获取元素的文本内容的另一种方法是text()
在XPath表达式中使用:
//*[@id='project-update-success-information']/text()
将返回(单个元素分隔--------
):
[whitespace-only text node] ----------------------- Project Updated
解决方案是
用于getText()
检索所有文本节点,然后排除仅包含空格或节点的节点
使用直接定位文本节点的XPath表达式,并排除仅包含空格的表达式.这样做的标准方法是[normalize-space()]
:
//*[@id='project-update-success-information']/text()[normalize-space()]
请注意,通常,不能保证元素的文本内容将位于单个文本节点中.很可能您有时会遇到HTML或XML,其中元素有多个文本节点,所有这些节点都包含非空白字符,例如:
Project Updated