所以目前我正在做一些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表达式访问该变量及其内容。