使用xmlstarlet插入嵌套Product元素时旧节点新增多余子元素如何解决
问题原因
你使用的 XPath 表达式 //Product 会匹配文档中所有的 <Product> 节点,包括已经存在的原有节点和刚新增的节点,因此每个节点下都会被插入新的 <name> 子元素。另外注意原有 XML 中节点名是大写开头的 <Name>,你的命令里用了小写的 name,也会导致节点名和预期不一致。
修正后的命令
xmlstarlet ed --inplace -s /Products -t elem -n "Product" -v "" \ -s /Products/Product[last()] -t elem -n "Name" -v "product2" \ Settings.xml
说明
将第二个插入操作的 XPath 改为 /Products/Product[last()],只会匹配你刚插入到 <Products> 列表末尾的最新 <Product> 节点,不会影响之前已有的节点,同时统一了 <Name> 节点的大小写,和原有结构保持一致。
内容的提问来源于stack exchange,提问作者Ballon Ura
相关产品推荐
相关产品推荐

