当前位置 : 主页 > 网页制作 > xml >

如何使用XmlStarlet将具有属性的元素插入XML文件?

来源:互联网 收集:自由互联 发布时间:2021-06-13
源 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

<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'
网友评论