xpath: фильтровать выбранные узлы на основе типа родительского узла - PullRequest
2 голосов
/ 03 октября 2019

Вот пример XML, с которым я имею дело:

<subchapter>
    <section>
    </section>
</subchapter>
<part>
    <section>
    </section>
</part>
<part>
    <section>
    </section>
</part>
<quotedContent>
    <section>
    </section>
</quotedContent>

Я пытаюсь отфильтровать определенные узлы в зависимости от типа их родительских узлов. Другими словами, я хочу найти все узлы <section> НЕ в узлах <quotedContent>. В дополнение к <part> и <subchapter> существуют различные другие родительские узлы, которые я хочу включить в мой конечный результат. Таким образом, речь идет об исключении только <quotedContent> узлов. Я почти уверен, что это просто вопрос получения правильной строки xpath.

Я использую пакет R xml2, в частности функцию xml_find_all (), следующим образом:

xml_find_all(ustc, "..//d1:section[parent='part']", ns = xml_ns(ustc))

На основев приведенном выше примере xml я ожидал получить два узла - первые два, а не последний внутри.

1 Ответ

0 голосов
/ 04 октября 2019

Используйте not(parent::quotedContent) в предикате, например, //section[not(parent::quotedContent)]. Или //*[not(self::quotedContent)]/section.

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