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

SAP PI中XSLT 1.0节点命名空间修改/添加需求求助

SAP PI中XSLT 1.0 命名空间修改/添加方案

核心思路

通过XSLT模板匹配机制,针对不同节点分别处理命名空间的修改或添加,同时完整保留节点内容与原有结构。

示例输入(Input.xml)

<Root>
    <OldNamespaceNode xmlns="http://old.namespace.com">
        <Child>Value1</Child>
    </OldNamespaceNode>
    <NoNamespaceNode>
        <SubChild>Value2</SubChild>
    </NoNamespaceNode>
</Root>

期望输出(Output.xml)

<Root xmlns="http://default.new.namespace.com">
    <NewNamespaceNode xmlns="http://new.namespace.com">
        <Child>Value1</Child>
    </NewNamespaceNode>
    <NoNamespaceNode xmlns="http://new.namespace.com">
        <SubChild>Value2</SubChild>
    </NoNamespaceNode>
</Root>

可行的XSLT 1.0样式表

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:old="http://old.namespace.com"
                exclude-result-prefixes="old">

    <!-- 匹配根节点,添加默认命名空间 -->
    <xsl:template match="/Root">
        <Root xmlns="http://default.new.namespace.com">
            <xsl:apply-templates/>
        </Root>
    </xsl:template>

    <!-- 匹配旧命名空间下的节点,替换命名空间与节点名 -->
    <xsl:template match="old:OldNamespaceNode">
        <NewNamespaceNode xmlns="http://new.namespace.com">
            <xsl:apply-templates select="@*|node()"/>
        </NewNamespaceNode>
    </xsl:template>

    <!-- 匹配无命名空间的目标节点,添加指定命名空间 -->
    <xsl:template match="NoNamespaceNode">
        <NoNamespaceNode xmlns="http://new.namespace.com">
            <xsl:apply-templates select="@*|node()"/>
        </NoNamespaceNode>
    </xsl:template>

    <!-- 通用模板:复制所有属性、文本、子节点,保留原有结构 -->
    <xsl:template match="@*|node()">
        <xsl:copy>
            <xsl:apply-templates select="@*|node()"/>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

代码说明

  • 声明旧命名空间前缀old,用于精准匹配目标节点,exclude-result-prefixes避免该前缀出现在最终输出中。
  • 根节点模板:替换根节点的默认命名空间,同时触发内部节点的处理逻辑。
  • 旧命名空间节点模板:匹配指定旧命名空间下的节点,替换为新节点名与新命名空间,同步复制所有属性与子节点。
  • 无命名空间节点模板:给目标节点添加指定命名空间,保留节点名称与内部内容。
  • 通用复制模板:确保未被特殊匹配的节点、属性、文本原样复制,防止结构丢失。

适配调整

如果你的实际节点结构、命名空间与示例不同,只需修改以下部分:

  1. 调整xmlns:old="http://old.namespace.com"中的旧命名空间地址为你的实际旧命名空间。
  2. 修改模板匹配的节点名(如old:OldNamespaceNode、NoNamespaceNode)为你的目标节点名称。
  3. 替换模板中的新命名空间地址(http://new.namespace.com、http://default.new.namespace.com)为需求中的实际地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 02:31:30