如何检查xpath中的节点是否有某个子节点x,但没有子节点y。

问题描述 投票:-1回答:1

我想获取某个github用户的非forked仓库。目前我通过这个xpath查询得到了所有的仓库。

parser.xpath("//ul[@data-filterable-for='your-repos-filter']/li/div/div/h3/a/@href").map{|repository| ...}

重点是我需要过滤掉那些最后一个div的下一个 "兄弟姐妹 "的仓库。 a span,类似的东西。

parser.xpath("//ul[@data-filterable-for='your-repos-filter']/li/div/div/h3 and not span/a/@href").map{|repository| ...}

我要找的HTML是 下面 检查其中一个分叉仓库)。

<li class="col-12 d-flex width-full py-4 border-bottom public fork" itemprop="owns" itemscope itemtype="http://schema.org/Code">
  <div class="col-10 col-lg-9 d-inline-block">
    <div class="d-inline-block mb-1">
      <h3 class="wb-break-all">
        <a href="/DominikAngerer/rails-boilerplate" itemprop="name codeRepository" >
        rails-boilerplate</a>

      </h3>

        <span class="f6 text-gray mb-1">
          Forked from <a class="muted-link" href="/polomasta/rails-boilerplate">polomasta/rails-boilerplate</a>
        </span>

    </div>

    <div>
        <p class="col-9 d-inline-block text-gray mb-2 pr-4" itemprop="description">
          Ruby on Rails Storyblok Starter Boilerplate
        </p>
    </div>

当不是一个分叉的仓库时,那些我正在寻找的,没有这样的 <span class="f6 text-gray mb-1">

是否可以这样查询,如果可以怎么查询?

ruby xpath nokogiri
1个回答
1
投票

你可以使用下面的XPath来选择非forked repositories的链接。

//div[@class="d-inline-block mb-1"][not(./span[contains(.,"Forked from")])]//@href

輸出:17個節點 https:/github.comDominikAngerer?tab=repositories。

© www.soinside.com 2019 - 2024. All rights reserved.