You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何修改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

火山引擎 最新活动