使用包含标记的XPath在标记之间提取文本

Pul*_*lie 6 python xpath

我有以下XML:

...<span class="st">In Tim <em>Power</em>: Politieman...</span>...
Run Code Online (Sandbox Code Playgroud)

我想提取<span>标签之间的部分.为此,我使用XPath:

   /span[@class="st"]
Run Code Online (Sandbox Code Playgroud)

然而,这将提取包括的所有内容<span>.和.

  /span[@class="st"]/text()
Run Code Online (Sandbox Code Playgroud)

将返回两个文本元素的列表.一个包含"在蒂姆".另一个":政治家".将<em>..</em>不包含,犹如分离处理.

是否有一个纯XPath解决方案返回:

In Tim <em>Power</em>: Politieman...
Run Code Online (Sandbox Code Playgroud)

编辑 感谢@helderdarocha和@TextGeek.使用XPath提取纯文本似乎非常简单,包括<em>.

/ span [@ class ="st"]/node()解决方案创建一个包含各行的列表,在Python中创建一个String是很简单的.

hel*_*cha 7

要获取任何子节点,您可以使用:

/span[@class="st"]/node()
Run Code Online (Sandbox Code Playgroud)

这将返回:

  1. 两个子文本节点
  2. 完整<em>节点(元素和内容).

如果你真的想要所有的text()节点,包括里面的节点em,那么得到所有的text()后代:

/span[@class="st"]//text()
Run Code Online (Sandbox Code Playgroud)

要么

/span[@class="st"]/descendant::text()
Run Code Online (Sandbox Code Playgroud)

这将返回三个文本节点,文本内部 <em>,但不返回<em>元素.