求助:批量修改XML文件bndbox标签内节点顺序(Linux环境)
批量调整XML中节点顺序的解决方案
单个XML文件处理命令
使用xmlstarlet的编辑模式,将<bndbox>内的ymin节点移动到xmax节点之前,命令如下:
xmlstarlet edit -L --move "//bndbox/ymin" --position before "//bndbox/xmax" 目标文件.xml
-L参数表示直接原地修改文件(无需生成临时文件)//bndbox/ymin定位所有<bndbox>下的ymin节点--position before "//bndbox/xmax"指定将目标节点移动到xmax节点的前面
批量处理/assets目录下所有XML文件
用Shell循环遍历目录内所有.xml文件,批量执行调整命令:
cd /assets for xml_file in *.xml; do xmlstarlet edit -L --move "//bndbox/ymin" --position before "//bndbox/xmax" "$xml_file" done
注意事项
- 若未安装
xmlstarlet,先通过包管理器安装:- Debian/Ubuntu系:
sudo apt install xmlstarlet - RHEL/CentOS系:
sudo yum install xmlstarlet
- Debian/Ubuntu系:
- 如果XML文件包含命名空间(比如根节点有
xmlns="xxx"属性),需要在命令中添加命名空间映射:xmlstarlet edit -L -N ns=http://example.com/your-namespace --move "//ns:bndbox/ns:ymin" --position before "//ns:bndbox/ns:xmax" "$xml_file" - 处理后可验证节点顺序,执行以下命令查看某个文件的
<bndbox>内节点顺序:xmlstarlet sel -t -m "//bndbox/*" -v "local-name()" -n 验证文件.xml
内容的提问来源于stack exchange,提问作者MaaAn13
相关产品推荐
相关产品推荐

