如何从xpath中排除子节点



我有以下代码:

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

我想选择"content"类中的所有文本,我将使用xPath:获得这些文本

doc.xpath('string(//div[@class="content"])')

问题是它选择了所有的文本,包括"table"标记中的文本。我需要从xPath中排除"table"。我该如何做到这一点?

XPath 1.0解决方案:

substring-after(string(//div[@class="content"]),string(//div[@class="content"]/table))

或者只使用concat:

concat(//table/following::p[1]," ",//table/following::p[2])

XPath表达式//div[@class="content"]选择div元素-不多也不少-应用string()函数会得到元素的字符串值,该值是其所有子代文本节点的串联。

在XPath1.0中,除了包含在一个子级中的文本之外,可能无法获取所有文本。使用XPath2.0,它可以作为完成

string-join(//div[@class="content"]/(node() except table)//text(), '')

但对于这种操作,您实际上是在转换而不是纯粹的选择领域,因此您正在扩展XPath的设计范围。

相关内容

  • 没有找到相关文章

最新更新