防止xi:包括处理

时间:2017-12-19 20:21:10

标签: xml xslt saxon xslt-3.0

使用XSL 3.0,我正在复制XML文档并查找和替换某些信息。使用这一切一切正常:

<xsl:template match="@* | node()">
    <xsl:copy>
        <xsl:apply-templates select="@* | node()"/>
    </xsl:copy>
</xsl:template>

<xsl:template match="//foo">
 ...some action on foo here...
</xsl:template>

但是,原始的xml文件包含<xi:include/>个非常大的xml个文件,并且复制过程正在打开&#39;这些xml个文件并将其插入到副本“整个”文件中。或者&#39;扩展&#39;。

我想保留原始<xi:include/>,而不是处理它。

如何指示XSLT文件不处理<xi:include/>,而只是复制元素和属性?

感谢。

1 个答案:

答案 0 :(得分:1)

XSLT处理器永远不会扩展xi:include元素,但可以在构建充当XSLT处理器输入的树的过程中对其进行扩展。通常(但不一定)准备此树的是XML解析器。一些XML解析器(但不是全部)能够在解析过程中扩展xi:include指令。 Saxon控制解析过程的地方,如果支持,-xi开关(或各种API中的等价物)可用于启用解析器的xi:include处理。默认情况下,此开关始终处于关闭状态,但如果以其他方式请求xi:include处理(Saxon未知),那么Saxon将不会将其关闭。例如,如果您提供SAXSource作为Saxon输入,那么这一切都取决于您如何选择在XMLReader对象中配置XML解析器(SAXSource)。

如果您在第三方应用程序(如oXygen或Stylus Studio)中运行Saxon,那么您需要研究如何在该环境中控制解析过程。