0

我必须从不同的来源传回信息,并且可以在两者之间进行转换,但是取决于源文档是否具有 xml 处理指令,我必须将其传递,如果没有,我不应该传递它。

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

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

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

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

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

编辑:我刚刚读到,即使它看起来像一个处理指令,<?xml version.. ?>实际上它不是,所以不确定是否可以匹配它,有什么建议吗?

4

1 回答 1

2

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

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

它在生成的 DOM/infoset 中不存在,因此无法在 XSLT 中匹配。

此外,您不能动态更改指令,例如or构造<xsl:output>中的不同输出元素将不起作用。<xsl:if><xsl:choose>

我的建议是:如果下游应用程序的一部分不理解 XML 声明(这是WTF的事实,真的让我摸不着头脑),那么请一直使用:

<xsl:output omit-xml-declaration="yes" />
于 2009-09-03T09:42:54.847 回答