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

如何用XSLT仅替换指定前缀ns2为Saa并保留其他元素

替换XML指定命名空间前缀的XSLT实现

需求说明:将XML中所有前缀为ns2的元素替换为Saa前缀,其他前缀(如head、pacs)或无前缀的元素保持原样,仅修改目标命名空间的前缀别名,不改变命名空间URI及其他内容。

XSLT代码实现

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:ns2="urn:swift:saa:xsd:saa.2.0"
    xmlns:Saa="urn:swift:saa:xsd:saa.2.0"
    exclude-result-prefixes="ns2">

    <!-- 身份模板:默认复制所有节点、属性、文本、注释等 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

    <!-- 匹配ns2命名空间下的元素,替换前缀为Saa -->
    <xsl:template match="ns2:*">
        <Saa:{local-name()}>
            <xsl:apply-templates select="@*|node()"/>
        </Saa:{local-name()}>
    </xsl:template>

    <!-- 若有ns2前缀的属性,同样替换前缀(示例XML中无此类属性,可按需保留) -->
    <xsl:template match="@ns2:*">
        <xsl:attribute name="Saa:{local-name()}" namespace="urn:swift:saa:xsd:saa.2.0">
            <xsl:value-of select="."/>
        </xsl:attribute>
    </xsl:template>

</xsl:stylesheet>

代码要点说明

  • 同时声明原ns2和新Saa对应同一个命名空间URI,确保语义完全不变。
  • exclude-result-prefixes="ns2"避免输出结果中保留原ns2的命名空间声明。
  • 身份模板保证所有非目标节点原样复制,仅对ns2命名空间下的元素(及属性)进行前缀替换。
  • 使用local-name()提取元素/属性的本地名称,结合新前缀生成符合要求的节点。

转换后XML示例

<?xml version="1.0"?>
<Saa:DataPDU xmlns:Saa="urn:swift:saa:xsd:saa.2.0">
    <Saa:Revision>2.0.13</Saa:Revision>
    <Saa:Header>
        <Saa:Message>
            <Saa:SenderReference>X</Saa:SenderReference>
            <Saa:MessageIdentifier>Y</Saa:MessageIdentifier>
            <Saa:Format>Z</Saa:Format>
            <Saa:Sender>
                <Saa:DN>DN1</Saa:DN>
            </Saa:Sender>
            <Saa:Receiver>
                <Saa:DN>DN2</Saa:DN>
            </Saa:Receiver>
            <Saa:NetworkInfo>
                <Saa:Service>Service</Saa:Service>
            </Saa:NetworkInfo>
        </Saa:Message>
    </Saa:Header>
    <Saa:Body>
        <head:AppHdr xmlns:head="urn:iso:std:iso:20022:tech:xsd:head.001.001.02">
            <head:Fr>
                <head:FIId>
                    <head:FinInstnId>
                        <head:BICFI>ABC</head:BICFI>
                    </head:FinInstnId>
                </head:FIId>
            </head:Fr>
            <head:To>
                <head:FIId>
                    <head:FinInstnId>
                        <head:BICFI>XYZ</head:BICFI>
                    </head:FinInstnId>
                </head:FIId>
            </head:To>
            <head:BizMsgIdr>123</head:BizMsgIdr>
            <head:MsgDefIdr>P8</head:MsgDefIdr>
            <head:BizSvc>02</head:BizSvc>
            <head:CreDt>2024-07-22</head:CreDt>
        </head:AppHdr>
        <pacs:Document xmlns:pacs="urn:iso:std:iso:20022:tech:xsd:pacs.008.001.08">
            <pacs:FIToFICstmrCdtTrf>
                <pacs:GrpHdr>
                    <pacs:MsgId>MsgId</pacs:MsgId>
                    <pacs:CreDtTm>2024-07-22</pacs:CreDtTm>
                    <pacs:NbOfTxs>1</pacs:NbOfTxs>
                    <pacs:SttlmInf>
                        <pacs:SttlmMtd>XYZ</pacs:SttlmMtd>
                    </pacs:SttlmInf>
                </pacs:GrpHdr>
            <pacs:FIToFICstmrCdtTrf>
        </pacs:Document>
    </Saa:Body>
</Saa:DataPDU>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 16:04:53