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

相关推荐
小小测试开发2 天前
JMeter XPath2 Extractor用法全解析:精准提取XML/HTML响应数据
xml·jmeter·html
likuolei2 天前
XML 元素 vs. 属性
xml·java·开发语言
likuolei3 天前
XML DOM - NodeList 对象
xml
q***16083 天前
Tomcat的server.xml配置详解
xml·java·tomcat
百***81273 天前
使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
xml·spring·logback
小小测试开发3 天前
JMeter XPath提取器用法详解:XML/HTML响应数据提取神器
xml·jmeter·html
♡喜欢做梦3 天前
MyBatis XML 配置文件:从配置规范到 CRUD 开发实践
xml·java·java-ee·mybatis
还算善良_8 天前
【XML生成】根据JSON格式化的报文,动态生成XML
xml·json
galaxyffang9 天前
skywalking整合logback.xml日志,日志文件出现乱码问题解决
xml·logback·skywalking
百***266310 天前
使用 Logback 的最佳实践:`logback.xml` 与 `logback-spring.xml` 的区别与用法
xml·spring·logback