对带有text()但没有空格的嵌套元素进行XPath

时间:2012-04-22 21:09:43

标签: xml xpath xhtml

我的XHTML很差,我需要用xpath解析。它看起来像这样:

<div class="foo">
  i need this text
  <br/>
  <br/>
  <span>sometext</span>
</div>

<div class="foo">
  <span>some other text</span>
  <span>sometext</span>
</div>

我想在第一个div中选择“我需要此文本”的所有内容。我的问题是,div元素包含空格或其他东西,所以// div [@ class =“foo”] / text()也为第二个div返回空字符串。我想忽略这些空白字段,我该怎么做?

2 个答案:

答案 0 :(得分:14)

使用

//div
   [.//text()
        [normalize-space() = 'i need this text']
   ]
    //text()[normalize-space()]

这将选择文档中任何div的任何非空白文本节点后代,(div)具有文本节点后代,其标准化字符串值为字符串{{1 }}

normalize-space() 函数接受一个字符串(上下文节点的字符串值 - 如果没有指定参数)并从中生成另一个字符串,其中包含所有前导和尾随空白字符被删除,相邻空白字符的任何内部组都被一个空格替换。

答案 1 :(得分:-1)

试试这个选择器:

//span[@class='glyphicon glyphicon-list mr5']/..[contains(normalize-space(text()),'Applications')]