XPath到其祖先具有包含特定文本字符串的后代的文本节点



我试图找到DOM中紧跟在前一个文本节点后面的文本节点的xpath,但它们不是兄弟,它们的xpath关系可能会更改。

我正在努力寻找美元的金额,它会发生变化。顶部有一个唯一的ID。唯一文本和美元金额是它们最近的div祖先中仅有的两段文本。我想找到唯一的文本,然后向上移动到最近的div祖先,然后返回该div祖先中包含"&";。我想确保它返回的是CLOESTdiv祖先(而不是uniqueID下的FIRSTdiv(,因为有很多div祖先都是这样。

我使用祖先和后代,因为uniqueID和text以及uniqueID与$amount之间的元素数量发生了变化。

我的最佳猜测(不起作用(://text(([包含(.,"$"(][祖先::div[1]//*[文本(([包括(.,"uniqueText"(]][祖先::div[@id="uniqueID"]]

不过,我认为"div[1]"返回的是顶部div,而不是uniqueText 上方最接近的div

<div id="unique">
<div>
<h4></h4>
<div>
<div>
<div>
<span>
<span>
<span>uniqueText
</span>
</span>
</span>
<div>
<div>
<p>$xxx</p>
</div>
</div>

您的问题还不完全清楚(html示例无效(,但如果我理解正确,并且您想从文本开始并获得$amount,其中它们都在最接近的公共<div>祖先下,$amount包含在该公共祖先下的单个<p>标记中,请在实际的html 上尝试

div[@id="unique"]//span[contains(./text()[1],"uniqueText")]/ancestor::div[1]/div[contains(.//p/text(),"$")]//p/text()

看看它是否有效。

最新更新