如何使用xmlstarlet在XML中插入首个同级子节点?
解决方案
要在<xml>下插入首个<subnode>节点,你需要使用xmlstarlet的-i(insert before,在指定节点前插入)选项,而非-s(append,追加到子节点末尾)。正确的命令如下:
xmlstarlet ed -L -i "//xml/subnode[1]" -t elem -n subnode -v "Mary James" src.xml
命令说明:
-L:直接修改原文件(原地编辑)-i "//xml/subnode[1]":定位到<xml>下的第一个<subnode>节点,在它之前插入新元素-t elem:指定插入的是元素节点-n subnode:新元素的名称为subnode-v "Mary James":新元素的文本内容为Mary James
验证效果:
执行命令后,src.xml的内容会变为你预期的结构:
<?xml version="1.0"?> <xml> <subnode> Mary James </subnode> <subnode> Peter Paul </subnode> <subnode> Peter daniel </subnode> <subnode> Peter Peter </subnode> </xml>
原命令无效的原因:
你原来的命令使用了-s(追加)选项,会把新节点加到<xml>的所有子节点末尾;同时//xml/[1]是错误的XPath语法,无法正确定位目标位置。
内容的提问来源于stack exchange,提问作者Ofuuzo
相关产品推荐
相关产品推荐

