是否可以根据XML处理指令在源文档中的存在来包含/排除XML处理指令?

时间:2009-09-03 08:19:31

标签: xml xslt transformation

我必须从不同的源传回信息并且可以在它们之间进行转换,但是根据源文档是否具有xml处理指令,我必须传递它,如果它没有,我不应该传递它

Input
<?xml version="1.0" encoding="UTF-8"?>
<Source/>

Output    
<?xml version="1.0" encoding="UTF-8"?>
<Source/>

如果它没有处理指令,我不应该将它包含在输出中,主要是为了支持其他一些不理解它们的遗留程序(呃!)

我可以动态切换样式表,并根据输入是否有指令使用omit-xml-declaration,但有没有办法在单个样式表中执行?

编辑:我无法删除返回数据之前存在的转换。

编辑:我刚读过,即使它看起来像处理指令,<?xml version.. ?>,实际上它不是,所以不确定是否可以匹配它,任何建议?

1 个答案:

答案 0 :(得分:2)

XML声明看起来像处理指令,但它不是。

存在通知XML解析器它将要读取的文档(XML版本,字符编码)。

它在结果DOM /信息集中不存在,因此无法在XSLT中匹配。

此外,您无法动态更改<xsl:output>指令,例如<xsl:if><xsl:choose>结构中的不同输出元素将无效。

我的建议是:如果下游应用程序的一部分不理解XML声明(这是一个 WTF 这个事实让我头脑发热),那么请一直关闭它们: / p>

<xsl:output omit-xml-declaration="yes" />