2014-03-04 86 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