我在使用xmlstarlet方面非常新,还没有完全理解选择值的语法。从MBus-Meter我得到xml格式的电报,我需要选择一些特定的值。与
xmlstarlet sel -t -m" // Value" -v。 -n mbus-10.xml
我得到了所有价值观,但我需要选择"价值"和#34;时间戳"在路径
DataRecord id =" 2"
在下面的例子中,它将是:
1450
和
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>
答案 0 :(得分: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表达式,选择Value
和Timestamp
个节点,这些节点是具有DataRecord
属性值id
节点的2
节点的子节点{1}}
self
- 仅包含上下文节点本身的轴
输出:
1450
2017-04-28T05:35:09