使用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/>
,而只是复制元素和属性?
感谢。
答案 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,那么您需要研究如何在该环境中控制解析过程。