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

相关推荐
悟能不能悟3 小时前
在 MyBatis 的xml中,什么时候大于号和小于号可以不用转义
xml·java·mybatis
慌糖4 小时前
XML重复查询一条Sql语句??怎么解决
xml·数据库·sql
casual_clover1 天前
Android 中 解析 XML 字符串的几种方式
android·xml
SuperherRo2 天前
Web攻防-XSS跨站&文件类型&功能逻辑&SVG&PDF&SWF&HTML&XML&PMessage&LocalStorage
xml·pdf·html·svg·localstorage·swf·pmessage
'tubug'3 天前
XXE(XML外部实体注入)详解
xml·web安全
不太厉害的程序员7 天前
NC65配置xml找不到Bean
xml·java·后端·eclipse
峥嵘life7 天前
Android xml的Preference设置visibility=“gone“ 无效分析解决
android·xml
Dxy12393102168 天前
通过XML方式在Word段落前添加空白段落
xml·python·word
zqmattack8 天前
XMLDecoder、LDAP 注入与修复
xml