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