2017-06-20 30 views
1

中選擇一個值我是使用xmlstarlet的新手,但還沒有完全理解選擇值的語法。從一個MBus-Meter我得到xml格式的電報,我需要選擇一些特定的值。 Withxmlstarlet在路徑下的<DataRecord id =「4」>

xmlstarlet sel -t -m「// Value」-v。 -n MBUS-10.xml

我得到的所有價值,但我需要在

DataRecord ID = 「2」

的路徑挑出來的 「價值」 和 「時間戳」

在下面的例子將是:

2017-04-28T05:35:09

有人可以幫助我嗎?

這裏是(縮寫)的xml文件:

<MBusData> 
    <SlaveInformation> 
     <Id>55993864</Id> 
     <Manufacturer>DME</Manufacturer> 
     <Version>64</Version> 
     <ProductName></ProductName> 
     <Medium>Heat: Outlet</Medium> 
     <AccessNumber>134</AccessNumber> 
     <Status>00</Status> 
     <Signature>0000</Signature> 
    </SlaveInformation> 

    <DataRecord id="0"> 
     <Function>Instantaneous value</Function> 
     <Unit>Energy (kWh)</Unit> 
     <Value>273</Value> 
     <Timestamp>2017-04-28T05:35:09</Timestamp> 
    </DataRecord> 

    <DataRecord id="1"> 
     <Function>Instantaneous value</Function> 
     <Unit>Energy (kWh)</Unit> 
     <Value>0</Value> 
     <Timestamp>2017-04-28T05:35:09</Timestamp> 
    </DataRecord> 

    <DataRecord id="2"> 
     <Function>Instantaneous value</Function> 
     <Unit>Volume (m m^3)</Unit> 
     <Value>1450</Value> 
     <Timestamp>2017-04-28T05:35:09</Timestamp> 
    </DataRecord> 

    <DataRecord id="3"> 
     <Function>Instantaneous value</Function> 
     <Unit>Volume (m m^3)</Unit> 
     <Value>231650</Value> 
     <Timestamp>2017-04-28T05:35:09</Timestamp> 
    </DataRecord> 

</MBusData> 

回答

1

使用以下的方法:

xmlstarlet sel -t -m "//DataRecord[@id='2']/*[self::Value or self::Timestamp]" -v . -n mbus-10.xml 
  • //DataRecord[@id='2']/*[self::Value or self::Timestamp] - xpath表達式,選擇ValueTimestamp節點其是兒童的DataRecord節點與id屬性值2

  • self - 軸只包含上下文節點本身

輸出:

1450 
2017-04-28T05:35:09 
相關問題