【问题标题】:Is it possible to include/exclude the XML Processing Instruction based on its presence in the source document?是否可以根据其在源文档中的存在来包含/排除 XML 处理指令?
【发布时间】:2009-09-03 08:19:31
【问题描述】:

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

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

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

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

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

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

编辑:我刚读到虽然它看起来像一个处理指令,&lt;?xml version.. ?&gt;,但实际上它不是,所以不确定是否可以匹配它,有什么建议吗?

【问题讨论】:

    标签: xml xslt transformation


    【解决方案1】:

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

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

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

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

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

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

    【讨论】:

    • 我的意思是,我可以动态切换样式表本身,一个有 omit-xml-declaration,一个没有。谢谢你的回答。
    • 您可以在源文档中查找字符串"&lt;?xml" 并决定要运行的样式表。不过,我认为您无法在内部 XSLT 中做出决定。
    猜你喜欢
    • 2016-08-19
    • 2010-09-23
    • 2011-06-04
    • 1970-01-01
    • 1970-01-01
    • 2011-09-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多