XPath的。获取标签内的文字,而不是标签外的其他文字

时间:2015-12-01 13:27:46

标签: r xpath

我在html页面中有两种模式,它们之间的唯一区别是在关闭的标记之后存在aditional文本。这是一个例子:

示例1(标记后附加文字):

<p><strong>14h45 De violents combats ont lieu à Zawiyah</strong>, à 40km à l'Ouest de Tripoli entre les insurgés et les forces restées fidèles au colonel Kadhafi. Un témoin oculaire, cité par l'agence de presse italienne Ansa, affirme: "C'est un massacre, il est difficile d'estimer le nombre de morts". Il y aurait une centaine de victimes, selon la BBC. &nbsp;</p>

样本2(没有附加文字):

<p><strong>Quitte à revenir dans l'euro quelques années plus tard?</strong>&nbsp;</p>

我需要两个XPath,因此我可以在标签'&lt; strong &gt; ...&lt; / strong &gt;'中获取文字对于这两种情况。

现在我正在使用

'//p//strong//text()[normalize-space()]' 

但它从两个样本中捕获文本,而我需要两个单独的XPath。

感谢任何帮助。

UPD

还有办法处理案件
<p>
    <a href="http://www.slate.com/id/2286172/" target="_blank">
        <strong>Combien coûte un mercenaire?</strong>
    </a>
    Alors que le régime de Kadhafi semble avoir recours à des combattants étrangers pour réprimer les insurgés, Slate se penche sur leur fonctionnement... et leur émoluement (en anglais).&nbsp;
</p>

XPath

"//p//strong[not(following-sibling::text()[normalize-space()])]//text()"

将返回:

Combien coûte un mercenaire?

但是标签后面有一个文字

1 个答案:

答案 0 :(得分:3)

您可以在following-sibling::text()[normalize-space()]的谓词中使用strong来仅获取非空文本节点后跟的strong元素:

//p/strong[following-sibling::text()[normalize-space()]]/text()

并使用相反的谓词not(following-sibling::text()[normalize-space()])来获取其余strong元素:

//p/strong[not(following-sibling::text()[normalize-space()])]/text()

注意:假设&nbsp;被认为是您正在使用的XPath库中的空白区域,上述操作将起作用。否则,您可能需要将strong元素后面的文本节点的长度与文本&nbsp;的长度进行比较,以确定文本节点是否仅仅是一个空格({{1 }}),类似于:

&nbsp;