使用 xmlstarlet 提取 XML 中元素的值

使用 xmlstarlet 提取 XML 中元素的值

我的情况很具体,而且我是初学者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>

在哪里= 上网本标签。

问题

  1. 我有文件哈希5a43dc3524,我想获取价值日期, 那是2008-06-04 16:40。做到这一点最简单的方法是什么?
  2. 另外,如何获得属性 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>hash5a43dc3524<file><date>

另外,如何从文件元素中获取属性id(即2)?再说一遍,我有哈希值,就这样。

我们可以做一些非常类似的事情:

xmlstarlet sel -t -v '//file[name/@hash="5a43dc3524"]/@id' data.xml

相关内容