我在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. </p>
样本2(没有附加文字):
<p><strong>Quitte à revenir dans l'euro quelques années plus tard?</strong> </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).
</p>
XPath
"//p//strong[not(following-sibling::text()[normalize-space()])]//text()"
将返回:
Combien coûte un mercenaire?
但是标签后面有一个文字
答案 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()
注意:假设
被认为是您正在使用的XPath库中的空白区域,上述操作将起作用。否则,您可能需要将strong
元素后面的文本节点的长度与文本
的长度进行比较,以确定文本节点是否仅仅是一个空格({{1 }}),类似于: