我想编写一个 Xpath (1.0),其中使用一个公共(public)基本元素,它选择具有不同标签类型和深度级别的元素。例如,我可以在 Google 站点上使用以下 Xpath://*[@id='main']/span | //*[@id='main']/div/script
...使用以下 HTML:
<div id="main" class="content" data-jiis="cc">
<span id="body" class="ctr-p">
<div id="footer" class="ctr-p">
<div id="footc" data-jiis="uc" data-jibp="h">
<script>
<div id="xfoot">...</div>
</div>
</div>
虽然我更喜欢它作为类似的东西:
//*[@id='main'](/span | /div/script)
...这是一个非法的表达。我尝试了一些
self
东西,但我不知道如何让它捕获script
,而不是 div
://*[@id='main']/*[self::span | self::div/script]
我了解
self::div/script
表示选择 div
与 script
child ,但我无法确定选择 script
的轴(如果存在)在这种情况下。我怎么能做到这一点?或者我必须使用我描述的第一个 Xpath?
最佳答案
XPath 表达式的中间不能有可选轴。不过,您可以将查询翻过来:
//*[self::span or self::script[parent::div]][ancestor::div[@id="main"]]
关于html - 我可以编写来选择一个元素或不同元素的子元素的最短 Xpath 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937373/