Столкнувшись с такой ошибкой, я обычно начинаю пытаться сократить свое выражение xpath, пока не выясню, откуда я получаю неожиданные данные. Ваши полные выражения:
/metadata/versioning/snapshotVersions[0]/value/text()
Это возвращает пустой набор. Если мы попробуем вместо этого:
/metadata/versioning/snapshotVersions
Мы увидим, что это возвращает:
<snapshotVersions>
<snapshotVersion>
<extension>ear</extension>
<value>4.0.0-10-20200803.052228-3</value>
<updated>20200803052228</updated>
</snapshotVersion>
<snapshotVersion>
<extension>pom</extension>
<value>4.0.0-10-20200803.052228-3</value>
<updated>20200803052228</updated>
</snapshotVersion>
</snapshotVersions>
Отлично! Но если мы добавим к этому [0]
, мы снова получим пустой набор:
$ xmllint --xpath '/metadata/versioning/snapshotVersions[0]' metadata.xml
XPath set is empty
Для этого есть две причины:
Вам нужно применить Оператор [n]
для элементов, составляющих список (так, snapshotVersion
, а не snapshotVersions
), и
Xpath начинает перечисление элементов с 1
, а не 0
.
Кажется, это делает то, что вы хотите:
$ xmllint --xpath '/metadata/versioning/snapshotVersions/snapshotVersion[1]/value/text()' metadata.xml
4.0.0-10-20200803.052228-3