微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

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'

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。