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

How to check if a node in xpath has a certain child x but also doesn't have a child y

我正在尝试获取给定 github 用户的非分叉存储库。目前,我设法通过此 xpath 查询获取了所有存储库:

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

关键是我需要过滤掉最后一个div的下一个'sibling'是不是一个span,类似于:

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

我正在寻找的 HTML 是 following(检查其中一个分叉的存储库):

<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">

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

您可以使用以下 XPath 来 select 非分支存储库的链接:

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

输出:https://github.com/DominikAngerer?tab=repositories

的 17 个节点