【问题标题】:XPath : All divs which not have a specific childXPath : 所有没有特定子元素的 div
【发布时间】:2014-11-27 19:13:11
【问题描述】:

我有 HTML 文件,我正在用 XPath 解析它。我想选择所有没有 [p] 标签的 [div] 节点。

例如输入:

<div>
    <p>no1</p>
</div>
<div>
    <div>
        <p>no2</p>
    </div>
</div>
<div>
    yes!!!
</div>

预期输出:

yes!!!

我尝试了这个 XPath 查询,但它不适合我:

//div[not (p)]

【问题讨论】:

    标签: html xml xpath xpath-2.0


    【解决方案1】:

    使用 //div[not(descendant::p)]

    这是一个快速的 XSL 示例

    <xsl:template match='/'>
    <div>
    <xsl:for-each select='//div[not(descendant::p)]'>
        <xsl:value-of select='.'/>
    </xsl:for-each>
    </div>
    </xsl:template>
    

    【讨论】:

    • 也许添加一些p 等于child:p./p 并且只匹配儿童的信息。而descendant::p.//p 匹配所有后代节点。
    【解决方案2】:

    xpath:

    //div[not (p)]
    

    在示例 xml 中返回 2 个div 节点:

    <div>  <-- This one
        <div>
    

    和你期望的:

    <div>
        yes!!!
    </div>
    

    您可能在查询中引用了 xpath,而您期望只有一个节点(例如 SelectSingleNode),因此只返回第一个节点。

    【讨论】:

      猜你喜欢
      • 2020-08-20
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 2011-05-06
      • 1970-01-01
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      相关资源
      最近更新 更多