XPath для всех значений атрибутов, а не только для первого?
Изменить: проблема в моем случае была вызвана инструментом, который не полностью реализует стандарт XPath. Моя попытка с
//key@
должен был работать (см. комментарии и ответ), и причина, по которой он не работает, заключается в том, что инструмент показывает только первый результат.
Мой XML выглядит так:
<Document id="someIdhere" token="123-456-789" created-by="john_doe" created-at="2020-05-27T10:04:28.244+0000" last-modified-by="jane_doe" last-modified-at="2020-07-30T09:27:59.440+0000">
<somedata/>
<somemoredata/>
<entries>
<entry key="resourceName">resourceLocation</entry>
<entry key="foo">bar</entry>
<entry key="somekey">somevalue</entry>
<entry key="keyname">keyvalue</entry>
<entry key="keyname1">value1</entry>
</entries>
<encryptedEntries/>
</Document>
Я ищу ценность всех
key
атрибуты (например,'resourcename','foo' и т. д.); не ценность
<entry>
узлы. У меня нет возможности заранее узнать, сколько записей будет и каково будет содержимое.
Я пробовал следующее:
//@*
-> дает все атрибуты, а не только
key
//entries/@*
-> ничего не возвращает//entry@*
-> ничего не возвращает//@key
-> возвращает только первый результат//entries/key[*]
-> ничего не возвращает//entry@key
-> ничего не возвращает//entry@key=*
-> ничего не возвращает
Я, наверное, пробовал и другие, но это то, что я помню. Если это имеет значение: XPath выполняется задачей XML Webhook в XLRelease Xebialabs.
1 ответ
@JaSON уже предоставил вам два жизнеспособных XPath в комментарии1:
//@key
выберут всеkey
атрибуты в документе.//entry/@key
выберут всеkey
атрибутыentry
элементы в документе.
Вы это прокомментировали
//entry/@key
возвращает только первое значение и списывает его на несоответствие инструмента / библиотеки. Поймите, что есть API-интерфейсы библиотеки, которые имеют разные вызовы для возврата первого выбранного элемента, а не для возврата всех выбранных элементов.
Вот объяснения каждой из сделанных вами попыток:
//@*
выбирает все атрибуты в документе.//entries/@*
ничего не выбирает, потому чтоentries
не имеет атрибутов.//entry@*
синтаксически неверен.//@key
выбирает всеkey
атрибуты в документе, но см. примечание API выше.//entries/key[*]
выбирает всеkey
дочерние элементы (изentries
elements) хотя бы с одним дочерним элементом//entry@key
синтаксически неверен.//entry@key=*
синтаксически неверен.
1 Проголосует за его ответ, если он его разместит.