【问题标题】:Unable to locate xpath element text that contains carriage return无法找到包含回车的 xpath 元素文本
【发布时间】:2019-12-19 16:07:06
【问题描述】:

我无法使用以下 Xpath 找到以下标签的文本值。标签的文本包含回车,我认为包含会忽略这一点。有没有办法搜索文本属性并忽略回车?

//*[@id='site-wrapper']//a[contains(text(), 'Report')]

<a target="_blank" href="/Bentley/Reports/74/0/5323914">
            <span class="fa fa-print"></span> Report
        </a>

【问题讨论】:

  • 尝试使用.(当前节点)而不是text()

标签: xml xpath


【解决方案1】:

这是因为contains() 函数需要一个字符串参数,因此text() 节点集将按照文档顺序先转换为第一个节点,然后再通过string() 函数转换。

当您有混合内容时,最好使用字符串值而不是文本节点,例如:

//*[@id='site-wrapper']//a[contains(., 'Report')]

【讨论】:

  • 很好的解释,+1。或者,抽象出空白而不会有意外子字符串匹配的风险('Bad Report' 等)://*[@id='site-wrapper']//a[normalize-space()='Report']
  • @Alejandro 非常感谢您为我提供的解决方案
  • Alejandro,&lt;a&gt; 可能有两个连续的 text() 节点子节点,第一个以“Re”结尾,第二个以“port”开头。如果 &lt;a&gt; 的单个文本节点子节点不包含“报告”,则此答案中的表达式选择的 &lt;a&gt; 元素是错误的结果。我会使用://*[@id='site-wrapper']//a[text()[contains(., 'Report')]] 请正确。
  • 嗨,@DimitreNovaatchev!在这种情况下,OP希望“找到下面a标签的文本值”,我认为这意味着字符串值。
  • @Alejandro,可能会有像这样的边缘情况:&lt;a target="_blank" href="/Bentley/Reports/74/0/5323914"&gt; &lt;p&gt;Do Re&lt;/p&gt;&lt;p&gt;port&lt;/p&gt; &lt;/a&gt;——我认为 OP 不希望选择这个 &lt;a&gt;
【解决方案2】:

尝试使用归一化空间:

//*[@id='site-wrapper']//a[normalize-space(text())='Report']

【讨论】:

  • 这个方法在尝试定位元素的时候恐怕不行
  • @Teague,我已经用完整的 Xpath 更新了答案,试一试
  • 我更新并尝试了代码仍然无法正常工作抱歉
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
  • 1970-01-01
  • 2020-09-27
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多