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

XSLT转换忽略命名空间后输出为HTML而非XML的问题求助

XSLT转换忽略命名空间后输出为HTML而非XML的问题求助

我来帮你梳理下问题根源,再给出针对性的解决方案!

你当前遇到的问题主要来自两个关键疏漏:

  1. 模板匹配的节点不存在:你的XSLT模板写的是匹配*[local-name()='elementName'],但你的输入XML里根本没有这个元素,所以XSLT会触发默认模板规则——默认模板会遍历所有节点并输出文本内容,这就导致你看到的不是预期的结构化XML,反而像是杂乱的文本(你误以为是HTML)。
  2. 节点选择未处理命名空间:xsl:for-each里直接写ServiceResponse/Parties/Party,但这些节点都带有out命名空间,直接这么写根本选不到任何节点,就算模板能触发,也生成不了预期内容。

针对你「必须忽略命名空间、不能反复写前缀」的需求,修改后的XSLT如下:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes" encoding="UTF-8"/>

    <!-- 匹配根节点,确保转换从这里启动,不走默认模板 -->
    <xsl:template match="/">
        <Entities>
            <xResults>
                <!-- 用local-name()忽略命名空间,精准选择目标节点 -->
                <xsl:for-each select="//*[local-name()='ServiceResponse']/*[local-name()='Parties']/*[local-name()='Party']">
                    <aParty>
                        <Field1Transformed>
                            <xsl:value-of select="*[local-name()='Field1']"/>
                        </Field1Transformed>
                        <Field2Transformed>
                            <xsl:value-of select="*[local-name()='Field2']"/>
                        </Field2Transformed>
                    </aParty>
                </xsl:for-each>
            </xResults>
        </Entities>
    </xsl:template>

    <!-- 覆盖默认文本模板,避免输出不必要的空白字符 -->
    <xsl:template match="text()"/>
</xsl:stylesheet>

修改说明:

  • 把模板改为匹配根节点/,确保整个转换按你的逻辑执行,不会触发默认模板的混乱输出。
  • 所有节点选择都用*[local-name()='节点名']的方式,彻底绕开命名空间,不用写任何前缀。
  • 添加空文本模板,过滤输入XML里的空白字符,让输出更整洁规范。

用这个XSLT处理你的输入XML,就能得到预期的结构化XML输出:

<?xml version="1.0" encoding="UTF-8"?>
<Entities>
   <xResults>
      <aParty>
         <Field1Transformed>Value1</Field1Transformed>
         <Field2Transformed>Value2</Field2Transformed>
      </aParty>
   </xResults>
</Entities>

备注:内容来源于stack exchange,提问作者Measel

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.22 11:23:09