#xml #xpath #automationanywhere
#xml #xpath #автоматизация везде
Вопрос:
Я пытаюсь выбрать узел на основе значения в элементе в файле xml, который содержит пространство имен.
Я использую команду Get XML Node от Automation Anywhere, которая ограничивает меня использованием однострочной инструкции XPath.
Это образец XML-файла
<IMPORT xmlns="urn:Import">
<STUFF>
<STUFF_TYPE>
<STUFF_TYPE_KEY>1</STUFF_TYPE_KEY>
</STUFF_TYPE>
<WALMART>
<STORE>
<STORE_ID TYPE="SC" ID="SC-12345">WM000001</STORE_ID>
<STORE_STATUS>O</STORE_STATUS>
</STORE>
</WALMART>
</STUFF>
</IMPORT>
Я хотел бы выбрать значение STORE_STATUS, где STORE_ID = WM000001
Прямо сейчас он не находит узел.
Ответ №1:
Вы можете использовать независимое от пространства имен выражение, например
//*[local-name() = 'STORE']/*[local-name() = 'STORE_ID' and text() = 'WM000001']/../*[local-name() = 'STORE_STATUS']
Это выбирает STORE_STATUS
элемент из всех STORE
элементов с STORE_ID
дочерними элементами, которые имеют значение WM000001
. Если вам нужно только значение, добавьте /text()
в конец выражения.
Комментарии:
1. Получаем следующую ошибку: ‘//*[namespace-uri()=’urn:Import’ и local-name() = ‘STORE’]/*[namespace-uri()=’urn:Import’ и local-name() = ‘STORE_ID’ и text()=’WM000001′]/DefaultNSPrefix:../*[namespace-uri()=’urn:Import’ и local-name() = ‘STORE_STATUS’ ]’ имеет недопустимое полное имя. Я предполагаю, что, поскольку
..
используется для перехода на следующий уровень и выбора STORE_STATUS, он не привязан к пространству имен.
Ответ №2:
В итоге это сработало:
//*[local-name() = 'STORE']/*[local-name() = 'STORE_ID' and text() = 'WM000001']/following-sibling::*[local-name() = 'STORE_STATUS']