Xpath-запрос с несколькими узлами на разных уровнях - PullRequest
0 голосов
/ 27 августа 2018

Мне нужен запрос Xpath, чтобы найти файл XML с определенными узлами. Узлы расположены на разных уровнях в XML-файле под разными родителями. Так что было бы, если бы я хотел восстановить файл, подобный приведенному ниже, используя узлы «author» и «ref year = 1999».

<FILE>
    <header>
        <author> X </author>
    </header>
    <text>
        <type>
            <ref year="1999">
        </type>
    </text>
</FILE>

Единственное отличие состоит в том, что используемый мной XML имеет гораздо более сложную структуру, поэтому было бы идеально, если бы я мог использовать "//" для поиска узлов где угодно, вместо использования точного пути. Я не могу использовать | оператор, чтобы соединить два узла, потому что я хочу найти файлы, которые удовлетворяют обоим условиям, а не только один.

Спасибо!

1 Ответ

0 голосов
/ 27 августа 2018

Это XPath,

//FILE[header/author="X" and text/type/ref/@year="1999"]

выберет FILE элементов в любом месте документа, которые соответствуют условиям в предикате.

Используйте or вместо and, если вы хотите дизъюнктивный предикат. (Обратите внимание, что | используется для объединения наборов узлов.) Комбинации and, or и not() могут использоваться для выражения полных логических выражений в предикате.

Если структура под FILE сама изменяется, вы можете использовать .//, чтобы «пропустить» варианты. Например,

//FILE[.//author="X" and .//ref/@year="1999"]

игнорирует путь между FILE и каждым из author и ref/@year.

...