xmlint не работает должным образом с xpath

Вот что у меня есть. Он явно не делает то, что должен, и даже разбился. Что-то не так или есть какой-нибудь другой инструмент, который может помочь мне разобрать XML в BASH?

:~$ cat test.xml 
<project xmlns="http://www.netbeans.org/ns/project/1">
  <type>org.netbeans.modules.ant.freeform</type>
</project>

:~$ xmllint --xpath '//type/text()' test.xml 
Segmentation fault (core dumped)

:~$ xmllint --xpath '//type' test.xml 
XPath set is empty

person user219882    schedule 13.03.2013    source источник
comment
Какую версию libxml2 вы используете (xmllint --version)?   -  person nwellnhof    schedule 13.03.2013


Ответы (2)


Чтобы найти элемент в пространстве имен, вы можете проверить локальное имя, например:

xmllint --xpath '//*[local-name()="type"]/text()' test.xml

Более точным способом было бы

xmllint --xpath '//*[namespace-uri()="http://www.netbeans.org/ns/project/1" and local-name()="type"]/text()' test.xml
person Ken Geis    schedule 27.02.2018

Ваша проблема в том, что ваш XML... не является допустимым файлом XML.

Попробуйте это раньше:

sed -i '1i <?xml version="1.0" encoding="UTF-8"?>' test.xml

И после тестирования у вас возникла проблема с пространством имен, поэтому попробуйте следующее:

xmllint --shell test.xml
/ > setns x=http://www.netbeans.org/ns/project/1
/ > xpath /x://type/text()
person Gilles Quenot    schedule 13.03.2013
comment
У меня это было там, и оно тоже не работало, поэтому я удалил его, чтобы убедиться, что у xmllint нет проблем с этим... И это все еще действительный XML-файл, даже без него (другие инструменты не возражают, если первой строчки не хватает) - person user219882; 13.03.2013
comment
Проблема в вашем пространстве имен, а не в первой строке XML - person Gilles Quenot; 13.03.2013
comment
как это может быть проблемой? как я понимаю, я бы винил инструмент, а не структуру XML - person user219882; 13.03.2013
comment
он работает без пространства имен, но я просто не могу удалить его случайным образом :) - person user219882; 13.03.2013
comment
xpath /x://type/text() показывает мне XPath error : Invalid expression, указывая на часть :/ - person user219882; 13.03.2013
comment
также в реальном мире у меня есть много разных пространств имен в документе, поэтому было бы здорово, если бы я мог просто заставить инструмент работать, не указывая их... - person user219882; 13.03.2013
comment
Вы пробовали без : ? - person Gilles Quenot; 13.03.2013
comment
да, без изменений... но я хочу, чтобы эти пространства имен оставались там и без необходимости указывать их явно... также опция --shell у меня не работает, так как я должен использовать xmllint в скрипте - person user219882; 14.03.2013