You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量修改XML节点:移除rng:define元素name属性的starting_前缀

批量移除RNG define元素name属性的starting_前缀

嘿,要把所有<rng:define>元素name属性里的starting_前缀都去掉是吧?这里有两种靠谱的实现方式,优先推荐用XSLT——毕竟处理XML就得用专门的结构化工具,比正则稳多了:

方法1:XSLT转换(推荐)

XSLT是处理XML的标准方案,能精准定位目标元素和属性,还能完整保留原XML的所有结构和其他内容。

下面是现成的XSLT代码,直接用就行:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:rng="http://relaxng.org/ns/structure/1.0">
    <!-- 默认模板:复制所有节点和属性,不做修改 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 专门匹配rng:define的name属性,移除starting_前缀 -->
    <xsl:template match="rng:define/@name">
        <xsl:attribute name="name">
            <xsl:value-of select="substring-after(., 'starting_')"/>
        </xsl:attribute>
    </xsl:template>
</xsl:stylesheet>

使用步骤:把你的RNG文件和这个XSLT文件放在一起,用XSLT处理器(比如命令行的xsltproc,或者可视化工具Oxygen XML)执行转换,就能得到修改后的文件。

方法2:正则表达式(仅适用于结构简单的XML)

如果你只是临时处理,且确定XML里的<rng:define>格式很规整,也可以用正则快速替换。比如在VS Code、Sublime这类编辑器里:

  • 查找模式:<rng:define name="starting_([^"]+)"
  • 替换模式:<rng:define name="$1"

或者用Linux/macOS的sed命令行批量处理:

sed -i 's/<rng:define name="starting_\([^"]\+\)"/<rng:define name="\1"/g' your-file.rng

⚠️ 敲黑板:正则处理XML有风险!如果name属性的位置变了、或者用了单引号,正则就可能匹配失败,所以非必要别用这个方法。

效果示例

输入的XML片段:

<rng:define name="starting_limits">
  <rng:element name="limits">
    <rng:ref name="Limits"/>
  </rng:element>
</rng:define>

经过处理后会变成:

<rng:define name="limits">
  <rng:element name="limits">
    <rng:ref name="Limits"/>
  </rng:element>
</rng:define>

内容的提问来源于stack exchange,提问作者Qeebrato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:39:39