html - 我可以编写来选择一个元素或不同元素的子元素的最短 Xpath 是什么?

标签 html xpath

我想编写一个 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表示选择 divscript child ,但我无法确定选择 script 的轴(如果存在)在这种情况下。我怎么能做到这一点?或者我必须使用我描述的第一个 Xpath?

最佳答案

XPath 表达式的中间不能有可选轴。不过,您可以将查询翻过来:

//*[self::span or self::script[parent::div]][ancestor::div[@id="main"]] 

关于html - 我可以编写来选择一个元素或不同元素的子元素的最短 Xpath 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40937373/

相关文章:

html - 基础框架 : My code stacks vertically when I think I followed the example to make them stack horizontally

html - 如何让 div 在必要时展开,就像表格一样?

python - xpath表达式 "html/body/div/text()[1]"的结果是: [object Text].它应该是使用Selenium打印元素文本的元素错误

java - 哪个 XPath 表达式找到具有给定命名空间声明的元素集?

c# - 在 Xpath 中使用引号

php - 如何让我的 PHP 变量在我的 CSS 样式表中回显?

javascript - 如何将元素的位置从旁边更改为下方?

html - Bootstrap - 从 navbar-brand 中创建一个类似于 navbar-collapse 的下拉菜单?

xslt - 如何 XPath sum() XSL for-each 循环中的所有先前节点?

xml - 在 XSLT/XPath 中选择唯一记录