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
相关产品推荐
相关产品推荐

