如何匹配嵌套的斜体字体标签与Xpath?

时间:2016-08-26 19:36:51

标签: python xpath lxml

考虑xml结构,如下所示

<p class="long">
  <i>Malicious</i>
  " is the adjective based on the noun "
  <i>malice</i>
  ", which means the desire to harm others. Both words come from the latin word "
</p>

我想选择<p>标记内的所有文字。 我试过

examples = tree.xpath('//p[@class="long"]/text()')

但是,由于某种原因,<i>标记之间的所有文本都会被忽略。

提取<p>标记内的所有文本的正确方法是什么,无论它是否也包含在其他嵌套标记中?

2 个答案:

答案 0 :(得分:1)

除非您有非常特殊的要求,否则请避免使用text() - 正是出于这个原因。您可能对p元素的字符串值感兴趣,而不是对其子文本和元素节点感兴趣。具体如何选择这取决于环境(你的XPath API是否允许返回一个字符串而不是一个节点集?它是否支持XPath 2.0?你的路径表达式是否选择了多个&#34; p&#34;元素?可以你只需返回p元素,然后在主机应用程序中获取它的字符串值吗?)

答案 1 :(得分:0)

尝试

examples=tree.xpath('//p[@class="long"]//text()')

(使用text()之前的双斜杠,它也匹配非直接子节点的节点)