2014-03-04 126 views
1

我試過使用xmlstarlet,並且遇到困難。我有以下XML提要。用xmlstarlet和特定屬性解析xml

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<RESPONSE VERSION="L100" REQUEST="show volume-statistics"> 
    <OBJECT basetype="volume-statistics" name="volume-statistics" oid="1" format="rows"> 
    <PROPERTY name="volume-name" display-name="Name">VOL0</PROPERTY> 
    <PROPERTY name="volume-IOPS" display-name="IOPS">100</PROPERTY> 
    </OBJECT> 
</RESPONSE> 

我需要選擇IOPS值,其中名稱等於VOL0並打印量-IOPS的值。

我曾嘗試下面的命令:

xmlstarlet sel -t -m "RESPONSE/OBJECT/PROPERTY/[@display-name='VOL0']" -v "RESPONSE/OBJECT/PROPERTY[@volume0IOPS] test.xml 

示例輸出

100 
+0

總是告訴我們您收到了哪些錯誤消息。你應該已經意識到括號是不匹配的(通過不執行你的代碼的shell,但仍然等待輸入)。解決這個問題之後,'xmlstarlet'會打印出一個通知,說明你的第一個XPath表達式是無效的(謂詞之前的'/'不應該在那裏)。 –

回答

1

你可以用一個XPath表達式,檢索其中包含 「VOL0」 name屬性<OBJECT/>元素做到這一點,然後選擇相應的IOPS屬性。

xmlstarlet sel -t -v ' 
    /RESPONSE/OBJECT[PROPERTY[@name="volume-name"]="VOL0"] 
    /PROPERTY[@name="volume-IOPS"]' test.xml 
+0

非常感謝。真的很感謝幫助。 – user3170001