如何从xpath中排除子节点?

如何从xpath中排除子节点?,xpath,Xpath,我有以下代码: <div class = "content"> <table id="detailsTable">...</table> <div class = "desc"> <p>Some text</p> </div> <p>Another text<p> </div> 问题是它选择了所有文本,包括“table”标记中的文本。我需要从xPat

我有以下代码:

<div class = "content">
  <table id="detailsTable">...</table>
  <div class = "desc">
     <p>Some text</p>
  </div>
  <p>Another text<p>
</div>

问题是它选择了所有文本,包括“table”标记中的文本。我需要从xPath中排除“表”。我将如何实现这一点

XPath表达式
//div[@class=“content”]
选择
div
元素-不多也不少-并应用
string()
函数为您提供元素的字符串值,该值是其所有子代文本节点的串联

在XPath 1.0中,可能无法获取除包含在一个特定子级中的文本之外的所有文本。使用XPath2.0,它可以按如下方式完成

string-join(//div[@class="content"]/(node() except table)//text(), '')
但是对于这种操作,您实际上处于转换的领域,而不是纯粹的选择,因此您正在扩展XPath的设计范围。

XPath 1.0解决方案:

substring-after(string(//div[@class="content"]),string(//div[@class="content"]/table))
或者使用concat:

concat(//table/following::p[1]," ",//table/following::p[2])
谢谢子字符串()按预期的那样执行。
concat(//table/following::p[1]," ",//table/following::p[2])