【问题标题】:XPath how to select an element where the following sibling has an specific child?XPath如何选择以下同级具有特定子级的元素?
【发布时间】:2023-03-04 06:24:01
【问题描述】:

我正在努力寻找答案,但不知如何找到下一个兄弟有直系孩子的元素...

例子:

<p>text</p>
<p>
    <br/>
    <span>text2</span>
</p>

在这种情况下,我该怎么办:

  1. 找到所有的&lt;p&gt;text,其中它有一个相邻的兄弟&lt;p&gt; 和一个第一个孩子&lt;br&gt;,我猜这会转化为p + p &gt; br:first-child
  2. 找到所有&lt;p&gt;text,其中它有一个相邻兄弟&lt;p&gt; 和任何级别的孩子&lt;br&gt;,我猜这会转化为p + p br

我尝试过的:

  1. //p[contains(., 'text') and following-sibling::p[br]]

1.1。 //p[contains(., 'text') and following-sibling::p/*[br]]

1.2//p[contains(., 'text')]/following-sibling::p[br]

没有任何效果,还有希望吗?

谢谢!

【问题讨论】:

    标签: html xml xpath


    【解决方案1】:

    您的第一次尝试很接近,但它正在检查 &lt;p&gt; 是否有 任何 个名为 &lt;p&gt; 的后续兄弟姐妹,其中有一个名为 &lt;br&gt; 的孩子。但我猜你真的想检查 第一个名为 &lt;p&gt; 的后续兄弟是否有一个名为 &lt;br&gt; 的孩子。

    所以用

    //p[contains(., 'text') and following-sibling::p[1][br]]
    

    要仅当&lt;br&gt;第一个孩子 时获取元素,您可以使用此扩展表达式

    //p[contains(., 'text') and following-sibling::p[1][*[self::br and position()=1]]]
    

    为了满足您的第二个要求,即&lt;br&gt; 可以是任何后代级别,而不仅仅是直接子级,您可以使用

    //p[contains(., 'text') and following-sibling::p[1][descendant-or-self::br]]
    

    【讨论】:

    • 谢谢,这就是答案:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 1970-01-01
    • 2012-11-30
    • 2018-12-09
    相关资源
    最近更新 更多