2012-12-06 36 views
1

我想通過XPath從XML中選擇值。我不知道爲什麼xmlstarlet sel -t -m //data -v "." /tmp/test.xml確實工作和xmlstarlet sel -t -m //data /tmp/test.xml如何使用XML starlet的「查看」選項?

我知道選項-v意味着查看。但xmlstarlet sel -t -m //data -v /tmp/test.xml卡住了。

所以,我的問題是如何正確使用選項查看

回答

2

實際上,-v意味着價值的-m裝置的for-each。這些參考XSLT的定義*,因爲sel子命令只是生成一個XSLT文檔並在輸入上運行它。

xmlstarlet sel -t -m //data /tmp/test.xml 

這是一個沒有主體的循環,所以沒有輸出。

xmlstarlet sel -t -m //data -v /tmp/test.xml 

這裏/tmp/test.xml被解釋爲XPath表達式-v所以這意味着:對於-每個數據節點,輸出的值的節點命名test.xmltmp根節點之下。它期望輸入XML來自標準輸入,因此它似乎會卡住。

通過使用-C選項,您始終可以將任何sel命令行的含義指定爲XSLT。


*在最近版本xmlstarlet(1.3+)-v將輸出在由一個新行分開的節點列表的每個節點值的,而不是XSLT定義其中value-的唯一的輸出的字符串值第一個節點。

+0

那麼,*匹配*,但是,它確實相當於for-each。 –