我想在Azure DevOps的Bash任务中使用xmlstartlet来编辑以下XML。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
<PostFlow name="PostFlow">
<Request/>
<Response/>
</PostFlow>
我要将这段代码写在下面。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ProxyEndpoint name="default">
<PostFlow name="PostFlow">
<Request>
<Step>
<Name>FC-SpikeArrest</Name>
</Step>
<Step>
<Name>FC-JWT</Name>
</Step>
</Request>
<Response/>
</PostFlow>
我使用了以下XML命令,并且可以使用FC-SpikeArrest添加一组Step和Name标签,但是无法添加FC-JWT标签。
xmlstarlet edit --omit-decl \
-s '/ProxyEndpoint/PostFlow/Request' -t elem -n "Step" \
-s '/ProxyEndpoint/PostFlow/Request/Step' -t elem -n "Name" -v "FC-SpikeArrest" ./default.xml >temp.xml
这是怎么了?
xmlstarlet edit --omit-decl \
-s '/ProxyEndpoint/PostFlow/Request' -t elem -n "Step" \
-s '/ProxyEndpoint/PostFlow/Request/Step' -t elem -n "Name" -v "FC-SpikeArrest" ./default.xml >temp.xml
mv temp.xml default1.xml
xmlstarlet edit --omit-decl \
-s '/ProxyEndpoint/PostFlow/Request' -t elem -n "Step" \
-s '/ProxyEndpoint/PostFlow/Request/Step' -t elem -n "Name" -v "FC-JWT"./default1.xml >temp1.xml
mv temp1.xml default.xml
答案 0 :(得分:1)
您可以在一个命令中执行以下操作:
xmlstarlet edit --omit-decl \
-s '/ProxyEndpoint/PostFlow/Request' -t elem -n "Step" \
-s '/ProxyEndpoint/PostFlow/Request/Step' -t elem -n "Name" -v "FC-SpikeArrest" \
-s '/ProxyEndpoint/PostFlow/Request' -t elem -n "Step" \
-s '/ProxyEndpoint/PostFlow/Request/Step[2]' -t elem -n "Name" -v "FC-JWT" ./default.xml > temp.xml
如果您想像以前一样使用两个步骤,则仍必须使用Step
来索引[2]
元素。因为否则将value元素添加到 all Step
元素中。
(您还缺少-v "FC-JWT"./default1.xml
之间的关键空格)
因此第二个命令应如下所示:
xmlstarlet edit --omit-decl \
-s '/ProxyEndpoint/PostFlow/Request' -t elem -n "Step" \
-s '/ProxyEndpoint/PostFlow/Request/Step[2]' -t elem -n "Name" -v "FC-JWT" ./default1.xml >temp1.xml