2016-04-06 17 views
1

還有就是我的XML:xmlstarlet:無效的表達式:[XPath]中編譯錯誤:for-each元素*

<?xml version="1.0" encoding="UTF-8"?> 
<CurrentUsage xmlns="http://www.vmware.com/vcloud/v1.5" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.vmware.com/vcloud/v1.5 http://cloud.com/api/v1.5/schema/master.xsd"> 
    <Link rel="up" href="cloudurl" type="application/vnd.vmware.vcloud.vm+xml"/> 
    <Metric name="cpu.usage.average" unit="PERCENT" value="3.4"/> 
    <Metric name="cpu.usage.maximum" unit="PERCENT" value="3.4"/> 
    <Metric name="cpu.usagemhz.average" unit="MEGAHERTZ" value="81.0"/> 
    <Metric name="mem.usage.average" unit="PERCENT" value="15.99"/> 
    <Metric name="disk.provisioned.latest" unit="KILOBYTE" value="503337805"/> 
    <Metric name="disk.used.latest" unit="KILOBYTE" value="290391113"/> 
</CurrentUsage> 

我使用xmlstarlet工具,並能夠得到與值列表:

xmlstarlet sel -t -v //@value test.xml 

但我真的堅持通過度量名稱獲得特定值(作爲「cpu.usage.average」的示例)。 我讀過噸的例子,試圖用這樣的表達式:

xmlstarlet sel -t -m "//[@name='cpu.usage.average']" -v //@value test.xml 

但這滴我到:

Invalid expression: //[@name='cpu.usage.average'] 
compilation error: element for-each* 

我如何在這種簡單的情況特殊的價值?

回答

1

您的XPath格式錯誤。使用//*[@name='cpu.usage.average']代替-m作爲修補程序(並且也繞過命名空間 - 否則您必須聲明命名空間前綴),@value代替-v

總之,這xmlstarlet命令

xmlstarlet sel -t -m "//*[@name='cpu.usage.average']" -v @value test.xml 

將返回

3.4 

爲XML,如要求。