能否使用XmlStarlet结合查询结果完成XML节点编辑?
使用XmlStarlet实现XML节点的查询与批量更新
当然可以用XmlStarlet完成你的需求,而且完全能把查询Attribute节点name属性和更新对应ID内容的操作合并成一条命令,不用分开执行两次步骤。
核心命令实现
直接使用XmlStarlet的编辑(ed)模式,结合XPath表达式就能一次性完成批量更新:
xmlstarlet ed -u "/xml/Attribute/ID" -x "../@name" input.xml
命令参数解释
ed:启动XmlStarlet的XML编辑功能-u "/xml/Attribute/ID":指定要更新的目标节点——根节点<xml>下所有<Attribute>里的<ID>元素-x "../@name":通过XPath表达式获取当前<ID>节点的父节点(也就是对应的<Attribute>)的name属性值,将其设为<ID>的新内容
直接修改原文件(可选)
如果希望直接修改源XML文件而不是输出到终端,可以添加--inplace参数:
xmlstarlet ed --inplace -u "/xml/Attribute/ID" -x "../@name" input.xml
效果验证
执行命令后,你的XML会被批量更新:
return (<Attribute name="attribute1"> <Value1>True</Value1> <Value2>True</Value2> <ID>attribute1</ID> </Attribute> )return (<Attribute name="attribute2"> <Value1>True</Value1> <Value2>True</Value2> <ID>attribute2</ID> </Attribute> )
可以看到,每个<Attribute>的<ID>内容已经自动替换成了对应节点的name属性值,完全符合你的要求。
内容的提问来源于stack exchange,提问作者user2923837
相关产品推荐
相关产品推荐

