![使用 xmlstarlet 提取 XML 中元素的值](https://linux22.com/image/222074/%E4%BD%BF%E7%94%A8%20xmlstarlet%20%E6%8F%90%E5%8F%96%20XML%20%E4%B8%AD%E5%85%83%E7%B4%A0%E7%9A%84%E5%80%BC.png)
我的情况很具体,而且我是初学者xmlstarlet。
我有一个如下所示的 XML 文件,其中包含数百个条目。
<netbooks>
<file id="2">
<date>2008-06-04 16:40</date>
<author>Daniel</author>
<name bytes="422904" hash="383a39b183">New name of - Just an example.pdf</nome>
<name bytes="383135" hash="5a43dc3524">Just an example.pdf</nome>
</file>
</netbooks>
在哪里根= 上网本标签。
问题
- 我有文件哈希
5a43dc3524
,我想获取价值的日期, 那是2008-06-04 16:40
。做到这一点最简单的方法是什么? - 另外,如何获得属性
id
(即2
)从文件元素?再说一遍,我有哈希值,就这样。
答案1
我有文件哈希 5a43dc3524,我想获取日期值,即 2008-06-04 16:40。做到这一点最简单的方法是什么?
我们可以使用 xpath 表达式获取日期//file[name/@hash="5a43dc3524"]/date/text()
。假设该文件data.xml
包含您问题中的示例数据,如果我们运行:
xmlstarlet sel -t -v '//file[name/@hash="5a43dc3524"]/date/text()' data.xml
我们得到输出:
2008-06-04 16:40
该表达式的//file[name/@hash="5a43dc3524"]/date/text()
意思是“查找包含属性值为 的元素<file>
的所有元素。对于每个元素,获取所包含元素的值并返回其文本值。<name>
hash
5a43dc3524
<file>
<date>
另外,如何从文件元素中获取属性id(即2)?再说一遍,我有哈希值,就这样。
我们可以做一些非常类似的事情:
xmlstarlet sel -t -v '//file[name/@hash="5a43dc3524"]/@id' data.xml