标记示例:
<div class="post-content">
<p>
<moredepth>
<...>
<span class="image-container float_right">
<div class="some_element">
image1
</div>
<p>do not need this</p>
</span>
<div class="image-container float_right">
image2
</div>
<p>text1</p>
<li>text2</li>
</...>
</moredepth>
</p>
</div>
最糟糕的是“图像容器”的深度可以在任何级别。
我尝试使用的Xpath:
//div[contains(@class, 'post-content')]//*[not(contains(@class, 'image-container'))]
我应该使用什么Xpath来排除“ some_element”以及任何深度的“ image-container”子元素和“ image-container”元素本身的其他子级?
此示例中的输出应为:
<p>
<moredepth>
<...>
<p>text1</p>
<li>text2</li>
</...>
</moredepth>
</p>
PS是否可以使用CSS进行这样的选择?
一旦路径表达式返回XML片段,XPath不允许对其进行处理。因此,您不能选择moredepth
:
//moredepth
因此没有得到所有此元素节点,包括您要排除的所有后代节点:
<moredepth>
<span class="image-container float_right">
<div class="some_element">
image1
</div>
<p>do not need this</p>
</span>
<div class="image-container float_right">
image2
</div>
<p>text1</p>
<li>text2</li>
</moredepth>
您只能选择以下子节点moredepth
:
//div[contains(@class, 'post-content')]/p/moredepth/*[not(contains(@class,'image-container'))]
将会产生(单个结果以分隔-------
):
<p>text1</p>
-----------------------
<li>text2</li>
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句