xmlstarlet: выбор элемента по номеру позиции
У меня есть этот файл XML
<?xml version="1.0" encoding="utf-8"?>
<xObject version="3.0" xmlns="http://schemas.microsoft.com/random/2006/objects">
<section id="*" type="product">
<table name="XFile">
<row sourceLineNumber="D:\bla\bla\">
<field>Borderish.fo</field>
<field>Documents</field>
<field>1</field>
<field>This line here 1</field>
</row>
<row sourceLineNumber="D:\blah\blah\">
<field>Charterish</field>
<field>Documents</field>
<field>1</field>
<field>This line here 2</field>
</row>
</table>
</section>
</xObject>
Что я хочу сделать, это выбрать каждый 4-й элемент с xmlstarlet.
Мне удалось сделать это с помощью XmlPad следующим образом: //table[@name='XFile']/row/field[4]/text(), но, к сожалению, я должен сделать это с помощью xmlstarlet.
Кроме того, если я удаляю атрибуты / пространство имен xObject, похоже, работает с помощью команды: xml sel -t -v "//table/row/field[4]/text()" test.xml
У кого-нибудь есть идеи, как это можно сделать? Я впервые пытаюсь оценить xpath.
С уважением, Стефан
1 ответ
Вы должны определить пространство имен и использовать его в своем выражении XPath:
$ xmlstarlet sel -N ns="http://schemas.microsoft.com/random/2006/objects" -t -v "//ns:table/ns:row/ns:field[4]/text()" test.xml
Команда выше использует -N ns="http://schemas.microsoft.com/random/2006/objects"
объявить пространство имен с именем ns
это значение в пространстве имен по умолчанию в вашем XML-файле. Тогда выражение XPath устанавливается так, чтобы это ns
префикс используется.