所以目前我正在做一些XML-> XSLT-> (HTML5 / CSS3)工作。现在我有一个menu.xml文件,我想把它包含在XSL文件或XML页面中。我做了很多搜索,但是我找不到一个简单的答案。
那么,如何将XML文件包含在另一个XML文件或XSL文件中呢?
编辑:通过include,我的意思是从另一个文件引用/加载它,而不是复制和粘贴它,或者只是嵌入它。
I.下面是如何将XML文档或片段嵌入到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>
记住:任何XML可以嵌入到XSLT样式表中,前提是它被包装到一个命名空间的元素(命名空间而不是XSLT命名空间)中,而这个包装元素在全局级别(< xsl:stylesheet>(top )元素)。
为了做到这一点,我们必须稍稍改变前面的例子:
- <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文件位于“menu.XML”文件(与XSLT样式表文件相同的目录中),则此转换将产生与上一个完全相同的结果:
- <menu>
- <choice>A</choice>
- <choice>B</choice>
- <choice>C</choice>
- </menu>
注意:在这两种情况下,我们都使用标准的XSLT功能document()
通常,一个定义一个全局变量,其值是调用document()函数的结果。然后通过转换过程中的XPath表达式访问该变量及其内容。