【发布时间】:2020-05-13 08:45:47
【问题描述】:
在这样的例子中:
<body>
<p id="0"/>
<div>
<p id="1"/>
</div>
<div>
<div>
<div>
<p id="2"/>
</div>
</div>
</div>
<blockquote>
<p id="3"/>
</blockquote>
<div>
<blockquote>
<div>
<p id="4"/>
</div>
</blockquote>
</div>
</body>
我想选择所有<p> 元素,它们要么是<body> 的直接子元素,要么只包含在<div> 元素链中,仅此而已。也就是说,我想选择 ids 0、1 和 2,而不是 3 或 4。在正则表达式中,这类似于 <body>(<div>)*<p>。但是这可以用 XPath 完成吗? body/p | body/div/p | body/div/div/p | body/div/div/div/p | ... 的一些简写?
ETA:请注意,id 属性仅出现在此示例中是为了方便,在我的实际应用程序中没有 ids。
另外,最终我会寻找一个可以使用任意节点作为参考的表达式(而不仅仅是<body>),即如何选择作为参考节点的后代的节点,但中间的任何中间级别他们是<div>,仅此而已。换一种说法,我想要其祖先都是 <div> 或特定引用节点的祖先或自身的节点(不仅仅是标签名称,而是特定节点)。
当我说“参考节点”时,我指的是要使用的东西,例如使用 Python lxml 包:
reference_node.xpath( problem_expression )
【问题讨论】:
标签: xpath