使用XPath根据前面的文本捕获元素



我试图通过其先前的文本获得<p>元素。例子:

<div>
Header:
<p>ITEM</p>
ID:
<p>123</p>
Title:
<p>Test</p>
</div>

,我想捕获& 123"。我已经尝试了几个组合的前例-兄弟姐妹,但还没有能够得到它。

.//p[preceding-sibling::node()[1][self::text()][.='ID:']]

.//p[preceding-sibling::text()='ID:']

我不能控制HTML,他们也不想改变它。我总是会在我想要捕捉的段落之前知道文本。这可能吗?

编辑:增加更多的例子。要抓取的元素并不总是要查找的第一个/最后一个元素。

这个XPath,

//p[preceding-sibling::node()[1][normalize-space()='ID:']

将选择所有紧接在前面的兄弟元素具有空间规范化字符串值ID:p元素。

指出:

  • 您的第一次尝试接近,但未能解释ID:周围的空白。
  • 您的第二次尝试又没有考虑到立即性约束。

XPath在包含ID的节点后给出123文本:

(//div[contains(text(), "ID:")]/p)[1]

最新更新