2013-03-13 106 views
0

這是我的。它顯然沒有做到它應該做的事,甚至崩潰了。有什麼錯誤或者是否有任何其他工具可以幫助我在BASH中解析XML?xmllint無法正常使用xpath

:~$ 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 
+0

你使用的是哪個版本的libxml2('xmllint --version')? – nwellnhof 2013-03-13 17:11:09

回答

-1

您的問題是您的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() 
+0

我在那裏有,它也沒有工作,所以我刪除它只是爲了檢查xmllint沒有這個問題...它仍然是一個有效的XML文件,即使沒有它(其他工具不介意如果第一行缺失) – user219882 2013-03-13 16:23:55

+1

問題是你的命名空間,而不是XML的第一行 – 2013-03-13 16:25:34

+0

這怎麼會成爲一個問題?正如我所看到的,我會責怪該工具,而不是XML結構 – user219882 2013-03-13 16:27:22

0

要搜索名稱空間的元素,你可以測試本地名稱,如下所示:

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

更多prec ise的方式是

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