无法为另一个标记尚未包含的“裸”文本节点构建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>')
,但这似乎抓住了所有文本节点,而不仅仅是顶级节点。
答案 0 :(得分:3)
doc.xpath('/html/body/text()').wrap('<p/>')
当您使用//
时,您选择了descendant-or-self
轴,即文档中的任意位置。相反,您希望使用/
和(默认的child
轴)来仅匹配作为特定元素的直接子节点的文本节点。
如果这不是包含<html>
和<body>
元素的HTML文档,那么只需:
doc.xpath('/*/text()').wrap('<p/>')
将选择所有文本元素作为根XML元素的子元素(无论其名称如何)。
答案 1 :(得分:0)
您可以找到除段落内的所有文字。
'//text()[not(ancestor::p)]'