Perl XML: Lib XML - Dynami c Node - PullRequest
       7

Perl XML: Lib XML - Dynami c Node

1 голос
/ 12 марта 2020

Я пытался разобрать xml с perl. У меня есть путь к дереву stati c, который работает правильно. Однако не все узлы остаются одинаковыми в разных xml файлах.

У меня есть этот код.

foreach my $travelSections ($dom->findnodes('//TRAVELER[@NAME="Final Assembly - 1/16-Traveler"]/...')){

Проблема в том, что xml в xml это меняется " Окончательная сборка - 1/16-Traveler"," Окончательная сборка -", всегда в начале, а" -Traveler"всегда в конце. Все, что находится посередине, может измениться. Как мне сделать это более динамичным c?

1 Ответ

2 голосов
/ 13 марта 2020

Аргумент, который вы передаете findnodes(), является выражением XPath. В вашем примере используется простая проверка на равенство (этот бит: @NAME="Final Assembly - 1/16-Traveler), но есть и другие варианты, включая функции XPath , которые вы можете использовать. Например, функция contains():

$dom->findnodes('//TRAVELER[contains(@NAME,"Final Assembly")]/...')

Вы также можете использовать and для объединения выражений:

$dom->findnodes('//TRAVELER[contains(@NAME,"Final Assembly") and contains(@NAME,"traveler")]/...')

Вот пример, с которым вы можете поиграть в XPath Sandbox .

Мы также можем XML :: Lib XML :: XPathContext зарегистрировать ваши собственные функции, написанные на Perl. См. Пользовательские функции XPath в документации.

...