因此,目前我正在做一些XML-> XSLT-> (HTML5/CSS3)工作。现在我有一个menu.xml文件,我想把它包含在XSL文件或XML页面中。我做了很多搜索,但我找不到一个直接的答案。
那么,如何将XML文件包含到另一个XML文件或XSL文件中呢?
编辑:我所说的包含,是指从另一个文件引用/加载它,而不是复制和粘贴它或简单地嵌入它。
发布于 2011-01-16 11:21:11
下面介绍了如何将任何文档或片段嵌入到XSLT样式表中,并在转换期间使用它们。
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:my="my:my">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<my:menu>
<menu>
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>
</my:menu>
<xsl:template match="/">
<xsl:copy-of select="document('')/*/my:menu/*"/>
</xsl:template>
</xsl:stylesheet>当将此转换应用于任何XML文档(本例中未使用)时,将生成所需的结果(仅复制XML)
<menu xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:my="my:my">
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>XSLT记住:任何都可以嵌入到XSLT样式表中,只要它被包装到一个带名称空间的元素(名称空间而不是XSLT名称空间)中,并且这个包装元素处于全局级别( <xsl:stylesheet> (顶部)元素的子元素)。
XMLII.访问驻留在单独的文件中的XML菜单文件
要做到这一点,我们只需稍微更改前面的示例:
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output omit-xml-declaration="yes" indent="yes"/>
<xsl:strip-space elements="*"/>
<xsl:template match="/">
<xsl:copy-of select="document('menu.XML')/*"/>
</xsl:template>
</xsl:stylesheet>如果菜单XML文件位于XSLT 'menu.XML' 文件中(位于与样式表文件相同的目录中,则此转换生成的结果与前面的结果完全相同:
<menu>
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>请注意:在这两种情况下,我们都使用标准的函数
通常,定义一个全局级别的变量,它的值是调用document()函数的结果。然后,在转换期间通过XPath表达式访问该变量及其内容。
发布于 2011-01-16 23:17:43
那么,如何将一个
文件包含到另一个或某个XSL文件中呢?
您可以使用 来引用menu.xml文件,并将其内容包含到XML文件和/或XSLT中。
所说的包含,我的意思是从另一个文件引用/加载它,而不是复制和粘贴它或简单地嵌入它。
通过使用外部实体,您可以从外部文件引用/加载menu.xml内容,而不必复制该内容。
例如,如果希望在XSLT中包含menu.xml内容,则可以在XSLT中声明外部实体,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE stylesheet [
<!ENTITY menu SYSTEM "./menu.xml">
]>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">然后可以像引用任何其他实体一样引用它:
&menu;在解析XSLT时,实体引用将被展开,menu.xml的XML内容将作为XSLT文档的一部分包括在内,就像您已经将其复制/粘贴到实体引用所在的位置一样。
发布于 2013-09-24 18:32:20
我让a blog post负责这件事。您可以使用document()来获取另一个XML,并使用参数传递内容。
https://stackoverflow.com/questions/4703312
复制相似问题