在 XML 节点名称前添加前缀

在 XML 节点名称前添加前缀

要查找 XML 文件中所有具有 type="instance" 属性的节点,并在其名称前添加前缀,可以使用以下 shell 脚本:

bash 复制代码
#!/bin/bash

# 定义要添加的前缀
PREFIX="New_"

# 使用 xmlstarlet 工具处理 XML 文件
for xmlfile in *.xml; do
    # 创建临时文件
    tempfile=$(mktemp)
    
    # 处理 XML 文件
    xmlstarlet ed \
        -r "//*[@type='instance']" -v "${PREFIX}concat(name())" \
        "$xmlfile" > "$tempfile"
    
    # 用处理后的文件替换原文件
    mv "$tempfile" "$xmlfile"
    
    echo "已处理: $xmlfile"
done

脚本说明

  1. 功能

    • 查找所有具有 type="instance" 属性的 XML 节点
    • 在这些节点名称前添加指定的前缀(默认为 "New_")
    • 保留原始 XML 结构和其他内容不变
  2. 依赖

    • 需要安装 xmlstarlet 工具(XML 处理工具)
    • 安装方法:sudo apt-get install xmlstarlet(Debian/Ubuntu)或 sudo yum install xmlstarlet(CentOS/RHEL)
  3. 使用方法

    • 将脚本保存为 prefix_nodes.sh
    • 修改 PREFIX 变量设置所需的前缀
    • 运行脚本:./prefix_nodes.sh

示例

输入 XML

xml 复制代码
<root>
    <element type="instance">内容1</element>
    <element type="other">不应修改</element>
    <container type="instance">
        <child>子元素</child>
    </container>
    <anotherElement type="instance">内容2</anotherElement>
</root>

输出 XML(使用前缀 "New_")

xml 复制代码
<root>
    <New_element type="instance">内容1</New_element>
    <element type="other">不应修改</element>
    <New_container type="instance">
        <child>子元素</child>
    </New_container>
    <New_anotherElement type="instance">内容2</New_anotherElement>
</root>

备选方案(无 xmlstarlet 依赖)

如果无法安装 xmlstarlet,可以使用这个基于 sed 的解决方案(适用于简单 XML 文件):

bash 复制代码
#!/bin/bash

# 定义要添加的前缀
PREFIX="New_"

for xmlfile in *.xml; do
    # 创建临时文件
    tempfile=$(mktemp)
    
    # 使用 sed 处理 XML
    sed -E "s/(<)([a-zA-Z0-9_]+)([^>]* type=['\"]instance['\"][^>]*>)/\1${PREFIX}\2\3/g" \
        "$xmlfile" > "$tempfile"
    
    # 用处理后的文件替换原文件
    mv "$tempfile" "$xmlfile"
    
    echo "已处理: $xmlfile"
done

注意

  • sed 方案对 XML 格式更敏感,适用于简单情况
  • 对于复杂 XML(多行标签、注释等),建议使用 xmlstarlet 方案
  • 在运行前建议备份原始 XML 文件

安装 xmlstarlet

如果系统中没有安装 xmlstarlet,可以使用以下命令安装:

Debian/Ubuntu:

bash 复制代码
sudo apt-get update
sudo apt-get install xmlstarlet

CentOS/RHEL:

bash 复制代码
sudo yum install xmlstarlet

macOS (使用 Homebrew):

bash 复制代码
brew install xmlstarlet

这个脚本会安全地处理 XML 文件,确保只修改具有 type="instance" 属性的节点名称,同时保持 XML 文档的结构完整性。

相关推荐
墨痕诉清风7 小时前
java漏洞集合工具(Struts2、Fastjson、Weblogic(xml)、Shiro、Log4j、Jboss、SpringCloud)
xml·java·struts·安全·web安全·spring cloud·log4j
Lbwnb丶9 小时前
failure: repodata/repomd.xml from base: [Errno 256] No more mirrors to try.
xml
拾忆,想起9 小时前
设计模式三大分类完全解析:构建高质量软件的基石
xml·微服务·设计模式·性能优化·服务发现
前网易架构师-高司机10 小时前
汽车充电插口识别数据集,可识别快充,慢充插口,支持yolo,coco json,pascal voc xml格式的标注数据集
xml·yolo·汽车·快充·充电·m慢充·插口
武藤一雄10 小时前
彻底吃透.NET中序列化反序列化
xml·微软·c#·json·.net·.netcore
spencer_tseng11 小时前
org.eclipse.wst.common.project.facet.core.xml could not be read.
xml·java·eclipse
小鸡吃米…1 天前
Python - XML 处理
xml·开发语言·python·开源
老歌老听老掉牙1 天前
Vericut 5轴机床MCH文件解析与构建指南
xml·python·vericut
ii_best1 天前
「安卓开发辅助工具按键精灵」xml全分辨率插件jsd插件脚本教程
android·xml·开发语言·编辑器·安卓
总会落叶1 天前
MyBatis XML映射配置与日志系统全解析
xml·tomcat·mybatis