在 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 文档的结构完整性。

相关推荐
spencer_tseng15 小时前
[j2cache ehcache.xml]/tmp/.ehcache-diskstore.lock (Permission denied)
xml·linux·python·ehcache·[j2cache
DevOpenClub2 天前
PDF 多格式解析如何避免混用输出:TEXT、HTML、XML 与 TAG 数据契约
xml·前端·数据库·pdf·html
Java小白笔记2 天前
MyBatis XML Mapper 标签与 CRUD 原理实战
xml·数据库·mybatis
风萧萧19993 天前
JAVA :JSONObject转换为XML
xml·java·python
马优晨5 天前
pom.xml 中 jquery webjars 依赖解释
xml·前端·jquery·jquery webjars·webjars依赖
楚识科技6 天前
定制 OCR 服务:非标证件与表格的 XML 字段映射实践
xml·ocr
光泽雨7 天前
JSON /XML转换
xml·json
我命由我123457 天前
UI 设计 7 种排列方式
xml·学习·ui·html·产品运营·产品经理·学习方法
ly768913 天前
XML 从入门到实践:语法、命名空间、XPath、XSD 与 Java 安全解析
xml·java·python