如何修改XML文件标签格式?求助用xmlstarlet转换annotation标签结构
使用xmlstarlet修改XML中annotation标签的属性格式
我来帮你解决这个xmlstarlet的问题!要把<annotation version="1.2.3" />转换成<annotation name="version" value="1.2.3" />,可以通过xmlstarlet的编辑(edit)模式完成,具体命令和细节如下:
核心命令
如果你只是想输出修改后的内容(不修改原文件),可以用这条命令:
xmlstarlet edit -O \ --insert "/manifest/project/annotation" --type attr --name "name" --value "version" \ --insert "/manifest/project/annotation" --type attr --name "value" --expr "@version" \ --delete "/manifest/project/annotation/@version" \ input.xml
如果需要直接修改原文件(注意:此操作不可逆,建议先备份原文件),添加-L参数即可:
xmlstarlet edit -L -O \ --insert "/manifest/project/annotation" --type attr --name "name" --value "version" \ --insert "/manifest/project/annotation" --type attr --name "value" --expr "@version" \ --delete "/manifest/project/annotation/@version" \ input.xml
命令各部分解释
让我们拆解一下每个参数的作用:
-O:格式化输出XML,让结果更易读-L:直接修改原文件(in-place编辑)--insert "/manifest/project/annotation" --type attr --name "name" --value "version":给所有匹配路径的annotation标签添加name="version"属性--insert "/manifest/project/annotation" --type attr --name "value" --expr "@version":添加value属性,值引用标签原本的version属性内容--delete "/manifest/project/annotation/@version":删除原来的version属性
验证示例
假设你的原始XML内容是:
<manifest> <project name="something" path="something" revision="some sha"> <annotation version="1.2.3" /> </project> <project name="another-app" path="another/path" revision="abc123"> <annotation version="4.5.6" /> </project> </manifest>
运行命令后,输出的XML会变成:
<manifest> <project name="something" path="something" revision="some sha"> <annotation name="version" value="1.2.3"/> </project> <project name="another-app" path="another/path" revision="abc123"> <annotation name="version" value="4.5.6"/> </project> </manifest>
注意事项
- 如果你的XML中
annotation标签的层级和示例不同,需要调整XPath路径(比如/manifest/project/annotation)来匹配实际结构 - 确保你的系统已安装xmlstarlet,可通过
xmlstarlet --version验证
内容的提问来源于stack exchange,提问作者rodee




