XPath - исключить потомков указанного c селектора - PullRequest
0 голосов
/ 16 июня 2020

У меня следующая разметка (включая атрибуты schema.org):

<body>
  <div itemscope itemtype="http://schema.org/Foo">
    <div>
      <div itemname="name">
        Foo scoped name
      </div>
    </div>
    <div>
      <div itemscope itemtype="http://schema.org/Bar">
        <div>
          <div itemname="name">
            Bar scoped name
          </div>
        </div>
      </div>
    </div>
  </div>
</body>

Мне нужно выбрать (предположительно по xpath, поскольку css селекторов недостаточно для этой задачи) div, которые имеют itemname="name" в области http://schema.org/Foo, но не те, у которых есть другой элемент с атрибутом itemscope, восходящим к ним.

Итак, в приведенном примере мне нужно выбрать только «Имя в области Foo», но не «Имя в области панели» .

1 Ответ

0 голосов
/ 16 июня 2020

Вы можете использовать что-то вроде:

//div[@itemname="name"][ancestor::div[@itemscope][1][@itemtype="http://schema.org/Foo"]]

Найдите элемент div с определенным значением атрибута c (@itemname="name"). Его первый div предок (с атрибутом @itemscope) также содержит заданное значение атрибута c @itemtype (http://schema.org/Foo).

Вывод: <div itemname="name"> Foo scoped name </div>

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...