我必须从不同的源传回信息并且可以在它们之间进行转换,但是根据源文档是否具有xml处理指令,我必须传递它,如果它没有,我不应该传递它
Input
<?xml version="1.0" encoding="UTF-8"?>
<Source/>
Output
<?xml version="1.0" encoding="UTF-8"?>
<Source/>
如果它没有处理指令,我不应该将它包含在输出中,主要是为了支持其他一些不理解它们的遗留程序(呃!)
我可以动态切换样式表,并根据输入是否有指令使用omit-xml-declaration,但有没有办法在单个样式表中执行?
编辑:我无法删除返回数据之前存在的转换。
编辑:我刚读过,即使它看起来像处理指令,<?xml version.. ?>
,实际上它不是,所以不确定是否可以匹配它,任何建议?
答案 0 :(得分:2)
XML声明看起来像处理指令,但它不是。
存在通知XML解析器它将要读取的文档(XML版本,字符编码)。
它在结果DOM /信息集中不存在,因此无法在XSLT中匹配。
此外,您无法动态更改<xsl:output>
指令,例如<xsl:if>
或<xsl:choose>
结构中的不同输出元素将无效。
我的建议是:如果下游应用程序的一部分不理解XML声明(这是一个 WTF 这个事实让我头脑发热),那么请一直关闭它们: / p>
<xsl:output omit-xml-declaration="yes" />