2009-09-03 104 views
0

我必须传回来自不同来源的信息,并且可以在两者之间进行转换,但根据源文档是否具有xml处理指令,我必须将其传递,如果不存在,则不应传递它。是否可以基于源文档中的XML处理指令来包含/排除XML处理指令?

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

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

如果它没有处理指令,我不应该包括它的输出,主要是为了支持其他一些旧的程序,不明白他们(废话!)

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

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

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

回答

2

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

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

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

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

我的建议是:如果下游应用的一部分,不明白XML声明(这是一个 跆拳道 事实真的让我抓我的头),然后用离开他们了所有的时间:

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

我的意思是,我可以动态地切换样式表本身,一个具有omit-xml声明和一个没有。感谢您的回答。 – Thiyagaraj 2009-09-03 10:07:46

+0

您可以在源文档中查找字符串“<?xml”'并决定要运行的样式表。不过,我认为你不能从* XSLT中*做出决定。 – Tomalak 2009-09-03 10:10:33