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

XSLT 1.0执行XML转XML转换后XML声明丢失该如何解决?

问题根因

1. 样式表结构错误,<msxml:script>标签未闭合

你提供的代码中,<msxml:script>元素开启后没有对应的</msxml:script>闭合标签,直接在其内部定义了<xsl:output>等全局配置,会导致XSLT处理器无法正确识别输出规则,<xsl:output>的配置完全不生效,这是XML声明丢失的核心原因。

2. <xsl:output>配置缺失必要属性

要强制输出XML声明,需要在<xsl:output>中显式配置两个属性:

  • omit-xml-declaration="no":明确要求处理器输出XML声明,部分XSLT处理器未检测到该配置时会默认跳过输出
  • encoding="UTF-8":指定输出编码,XML声明默认携带编码属性,缺失该配置也可能触发部分处理器省略声明

修复后的代码示例

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:msxml="urn:schemas-microsoft-com:xslt"
    xmlns:cd="urn:my-scripts"
    exclude-result-prefixes="xs msxml cd">
    <msxml:script language="VB" implements-prefix="cd">
        <msxml:assembly name="System.Windows.Forms" />
        <msxml:assembly href="Made4Net.DataAccess.dll" />
        <msxml:assembly href="Made4Net.Shared.dll" />
        <msxml:using namespace="System.IO" />
    </msxml:script>
    <xsl:output method="xml" standalone="yes" encoding="UTF-8" omit-xml-declaration="no"/>
    <xsl:template match="/">
        <!-- 此处补充你的转换逻辑 -->
    </xsl:template>
</xsl:stylesheet>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 22:06:03