使用bash和xmlstarlet基于来自同一标记的其他属性添加xml属性值

时间:2017-08-31 10:16:07

标签: bash xslt attributes xmlstarlet

我有以下xml结构 input.xml中

<route order="1" xml:base="directory/filename1.xml">
    <name>name1</name>
</route> 
<route order="2" xml:base="directory/filename2.xml">
    <name>name2</name>
</route> 

我想作为output.xml

<route order="1" xml:base="directory/filename1.xml" xml:timestamp="2017-08-30_12:00:00">
    <name>name1</name>
</route> 
<route order="2" xml:base="directory/filename2.xml" xml:timestamp="2017-05-30_12:30:00">
    <name>name2</name>
</route> 

其中xml:timestamp是日期函数的结果,其中xml:base为输入

date -r directory/filename1.xml +'%Y-%m-%d_%H:%M:%S'

我可以像这样添加xml:timestamp属性

xmlstarlet ed --insert "/route" --type attr -n xml:timestamp -v 2017-08-31 input.xml

但是如何将日期函数的结果传递给-v?

1 个答案:

答案 0 :(得分:0)

您可以通过将完整命令放在$()中来引用date命令返回的结果,因此以下内容应该有效:

xmlstarlet ed --insert "/route" --type attr -n xml:timestamp -v "$(date -r directory/filename1.xml +'%Y-%m-%d_%H:%M:%S')" input.xml