2016-04-06 12 views
1

私のXMLがあります:xmlstarlet:無効な表現:[XPathの]コンパイルエラー:ため、各要素*

<?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の形式が正しくありません。 -mの場合は//*[@name='cpu.usage.average']を修正(および名前空間をバイパスする - そうでない場合は名前空間接頭辞を宣言する必要があります)との場合は@valueを使用してください。要求されたよう

要するに、このxmlstarletコマンド

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

は、あなたのXMLのため

3.4 

を返します。

関連する問題