代码之家  ›  专栏  ›  技术社区  ›  Dorad

XPath-检索满足条件的子体的父级

  •  0
  • Dorad  · 技术社区  · 7 年前


    B.主体仅包含跨距节点,称之为顶级跨距
    C.顶级跨距包含(1)个文本节点(2)个带类的跨距的组合,称它们为低级跨距

    我们需要检索具有一个或多个具有类“a”或“b”的较低级别跨度的每个顶级跨度。

    我们迄今为止的最佳拍摄:

    //span//span[contains(concat(' ', normalize-space(@class), ' '), ' qri ') or contains(concat(' ', normalize-space(@class), ' '), ' ktiv ')]
    

    但它给出了较低的水平跨度。

    x = new XPathEvaluator();
    var it = x.evaluate("//span//span[contains(concat(' ', normalize-space(@class), ' '), ' a ') or contains(concat(' ', normalize-space(@class), ' '), ' b ')]", document.body.cloneNode(true));
    var results = [];
    for (var current = it.iterateNext(); current; current = it.iterateNext()) {
      results.push(current.id);
    }
    console.log(results);
    <span id="top1">In a<span id="a1" class="a">ultrices felis</span><span id="b1" class="b">sollicitudin felis</span></span>
    <span id="top2">congue velit<span id="a2" class="a">Sed porttitor</span>Phasellus posuere</span>
    <span id="top3">purus. Etiam<span id="b2" class="b">tellus, ultrices</span>Morbi interdum</span>
    <span id="top4">leo malesuada tristique</span>

    期望输出为:

    [
        "top1",
        "top2",
        "top3"
    ]
    
    1 回复  |  直到 7 年前
        1
  •  1
  •   zx485 potemkin    7 年前

    尝试以下XPath

    //span[.//span[@class = 'a' or @class='b']]
    

    它选择全部 span 有一个或多个 子女 class a b

    如果您需要更具体的内容,请添加 parent::

    //span[parent::body and .//span[@class = 'a' or @class='b']]
    

    另一种可能性是绝对路径:

    /body/span[.//span[@class = 'a' or @class='b']]