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的文件,并且复制过程是“打开”这些xml文件并将它们插入“完整”或“扩展”的副本中。

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

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

谢谢。

4

1 回答 1

1

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

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

于 2017-12-20T10:19:21.147 回答