源
XML
<xml> <block> <el name="a">92346</el> <el name="b">lorem</el> </block> <block> <el name="a">89753</el> <el name="b">ipsum</el> </block> </xml>
宾语
我想插入< el name =“c”> 0< / el>每个< block>中的元素使用Linux shell脚本:
<xml> <block> <el name="a">92346</el> <el name="b">lorem</el> <el name="c">0</el> </block> <block> <el name="a">89753</el> <el name="b">ipsum</el> <el name="c">0</el> </block> </xml>
我可以使用XmlStarlet附加元素:
xmlstarlet ed -a '/xml/block/el[@name="b"]' \ --type 'elem' -n 'el' -v 0
问题
解决方法
答案
> / xml / block / el [not(@name)]
>如other answer所述:
You can’t insert an element with an attribute directly but since
every edit operation is performed in sequence,you can insert an
element and then add an attribute.
命令
xmlstarlet ed -a '/xml/block/el[@name="b"]' \ -t 'elem' -n 'el' -v 0 \ -i '/xml/block/el[not(@name)]' \ -t 'attr' -n 'name' -v 'c'