源 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"923
<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
问题
>选择每个< el>的XPath表达式是什么?元素
没有名称属性?
>我可以附加元素并使用单个插入属性xml ed
命令?
> / 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'