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

相关推荐
超级小忍1 天前
在 Spring Boot 中使用 MyBatis 的 XML 文件编写 SQL 语句详解
xml·spring boot·mybatis
你我约定有三1 天前
spring--xml注入时bean的property属性
xml·java·spring
12345,catch a tiger1 天前
实用技巧 Excel 与 XML互转
xml
24kHT2 天前
xml映射文件的方式操作mybatis
xml·mybatis
石头wang2 天前
xml 知识总结: xsd,xsi:schemaLocation,xmlns,xmlns:xsi
xml
人生在勤,不索何获-白大侠2 天前
day21——特殊文件:XML、Properties、以及日志框架
xml·java·开发语言
代码的余温3 天前
Spring Boot集成Logback日志全攻略
xml·spring boot·logback
代码的余温3 天前
Logback.xml配置详解与实战指南
xml·logback
wen's4 天前
React Native安卓刘海屏适配终极方案:仅需修改 AndroidManifest.xml!
android·xml·react native
面朝大海,春不暖,花不开5 天前
结构化数据格式解析:JSON 与 XML 的技术应用与实践
xml·json