2

为尚未包含在另一个标记中的“裸”文本节点构建 XPath 选择器时遇到问题。我想改变这个:

some naked text <p>some wrapped text</p> more naked text

进入这个:

<p>some naked text</p> <p>some wrapped text</p> <p>more naked text</p>

我尝试使用doc.xpath("//child::text()").wrap('<p></p>'),但这似乎抓住了所有文本节点,而不仅仅是顶级节点。

4

2 回答 2

3
doc.xpath('/html/body/text()').wrap('<p/>')

当您使用时,//您选择的是descendant-or-self轴,即文档中的任何位置。相反,您希望使用/and (默认child轴)仅匹配作为特定元素的直接子元素的文本节点。

如果这不是一个带有<html>and<body>元素的 HTML 文档,那么只需:

doc.xpath('/*/text()').wrap('<p/>')

将选择作为根 XML 元素的子元素的所有文本元素(无论其名称如何)。

于 2013-06-04T04:10:06.947 回答
0

您可以找到除段落内的所有文本。

'//text()[not(ancestor::p)]'
于 2013-06-03T15:14:32.947 回答