在下面的HTML中:
<html>
<div class="row content-box">
<div class="col-xs-12 col-sm-6">
<div class="gray-separator-3">
<div class="row to-top">
<h2 class="xs-mt-0">
Who's covered?
<span class="ns-i-pencil_icon icon-flipped pensil-font"></span>
<span>
<a class="edit-font firefinder-match" href="#">Edit</a>
</span>
</h2>
<p class="xs-mt-0 xs-mb-0">David</p>
</div>
</div>
</div>
</html>
“编辑”链接的
//div[.//h2[contains(.,'Who's covered?')]]//span/a[.='Edit']
但写作时似乎按预期工作:
//div[.//h2]//span/a[.='Edit']
当<h2>
就像下面的情况一样,当我写这样的XPath时:
//div[.//h2[contains(.,'What's covered?')]]//span/a[.='Edit']
它标识了元素。
<html>
<div class="row content-box">
<div class="col-xs-12 col-sm-6">
<div class="gray-separator-3">
<div class="row to-top">
<h2 class="xs-mt-0">
What's covered?
</h2>
<span>
<a class="edit-font firefinder-match" href="#">Edit</a>
</span>
<p class="xs-mt-0 xs-mb-0">David</p>
</div>
</div>
</div>
</html>
是否有理由不读取其下有子节点的<h2>
以及文本?
有人可以解释当一个节点同时具有文本和子树以及在编写XPath时只有文本但没有子树的节点时有什么区别吗?
答案 0 :(得分:3)
这与混合内容和非混合内容无关。
您的第一个XPath格式不正确。从
改变它//div[.//h2[contains(.,'Who's covered?')]]//span/a[.='Edit']
到
//div[.//h2[contains(.,"Who's covered?")]]//span/a[.='Edit']
它将按预期工作。
请注意,如果托管XPath的语言已经使用"
来包围XPath本身,那么您应该能够逃避内部"
(对于Java):
"//div[.//h2[contains(.,\"Who's covered?\")]]//span/a[.='Edit']"
当
下没有子节点时,工作正常
不,那个畸形的XPath在任何地方都不能正常工作。