使用bash和xmlstarlet基于同一标记中的其他属性添加xml属性值
我有以下xml结构 input.xml使用bash和xmlstarlet基于同一标记中的其他属性添加xml属性值,bash,xslt,attributes,xmlstarlet,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> 我可以像这样添加一
<route order="1" xml:base="directory/filename1.xml">
<name>name1</name>
</route>
<route order="2" xml:base="directory/filename2.xml">
<name>name2</name>
</route>
我可以像这样添加一个xml:timestamp属性
xmlstarlet ed --insert "/route" --type attr -n xml:timestamp -v 2017-08-31 input.xml
但是如何将date函数的结果传递给-v?您可以通过将完整的命令放入$()中来引用date命令返回的结果,因此以下操作应该有效:
xmlstarlet ed --insert "/route" --type attr -n xml:timestamp -v "$(date -r directory/filename1.xml +'%Y-%m-%d_%H:%M:%S')" input.xml
您可以通过将complete命令放在$()中来引用date命令返回的结果,因此以下操作应该有效:
xmlstarlet ed --insert "/route" --type attr -n xml:timestamp -v "$(date -r directory/filename1.xml +'%Y-%m-%d_%H:%M:%S')" input.xml
谢谢你的快速回复。但是如何使用$()中的xml:base属性值作为参数呢?可以使用$(sed-En的@^.*order=\“1\”xml:base=\“(.*)”xml:timestamp*$@\1@p'文件名)。相应地更改订单号。感谢Raman的回复。这是可行的,但是如果我有几百个属性为order=“…”的标签呢?是否可以使用xslt转换文件?您可以使用readarray arr将所有条目读取到一个数组中,感谢您的快速响应。但是如何使用$()中的xml:base属性值作为参数呢?可以使用$(sed-En的@^.*order=\“1\”xml:base=\“(.*)”xml:timestamp*$@\1@p'文件名)。相应地更改订单号。感谢Raman的回复。这是可行的,但是如果我有几百个属性为order=“…”的标签呢?是否可以使用xslt转换文件?您可以使用readarray arr将所有条目读取到一个数组中
xmlstarlet ed --insert "/route" --type attr -n xml:timestamp -v "$(date -r directory/filename1.xml +'%Y-%m-%d_%H:%M:%S')" input.xml