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

使用XSL将SOAP请求XML转换为普通标签XML遇到问题

解决SOAP XML转无命名空间前缀XML的XSLT方案

嘿,刚好我之前处理过类似的需求,给你一个直接能用的XSLT脚本,完美适配你的转换需求:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"
                xmlns:ns1="http://testnamespace.org">
    <!-- 匹配SOAP信封和Body,直接处理它们的子节点,跳过外层结构 -->
    <xsl:template match="SOAP-ENV:Envelope | SOAP-ENV:Body">
        <xsl:apply-templates/>
    </xsl:template>

    <!-- 匹配所有元素,生成不带命名空间前缀的新元素 -->
    <xsl:template match="*">
        <xsl:element name="{local-name()}">
            <!-- 复制元素的所有属性(如果有的话) -->
            <xsl:apply-templates select="@* | node()"/>
        </xsl:element>
    </xsl:template>

    <!-- 复制文本、注释等节点 -->
    <xsl:template match="text() | comment() | processing-instruction()">
        <xsl:copy/>
    </xsl:template>
</xsl:stylesheet>

代码说明:

  • 首先我们在XSLT里声明了SOAP和业务数据的命名空间,这样XSLT能正确识别输入XML里的带前缀元素
  • 第一个模板专门匹配SOAP-ENV:Envelope和SOAP-ENV:Body,直接应用子节点的模板,相当于把这两层外层结构“剥掉”
  • 核心的元素匹配模板用local-name()获取元素的本地名称(去掉前缀的部分),生成新的无前缀元素
  • 最后一个模板负责原样复制文本、注释等非元素节点,保证内容完整

测试效果:

把你提供的输入SOAP XML用这个XSLT转换后,就能得到你期望的结果:

<GetUserBalance>
  <userId>tonysin</userId>
  <currency>CNY</currency>
</GetUserBalance>
<loginToken>a1b2c3d4</loginToken>

如果你的业务数据命名空间有变化,只需要修改XSLT里的xmlns:ns1属性值就行,非常灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:23:25