所以目前我正在做一些XML-> XSLT->(HTML5/CSS3)工作.现在我有一个menu.xml文件,我想将它包含在XSL文件或XML页面中.我做了很多搜索,但我找不到直截了当的答案.
那么,如何将XML文件包含到另一个XML文件或XSL文件中?
编辑:通过包含,我的意思是从其他文件引用/加载它,而不是复制和粘贴它或只是嵌入它.
Dim*_*hev 36
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>
Run Code Online (Sandbox Code Playgroud)
当此转换应用于任何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>
Run Code Online (Sandbox Code Playgroud)
请记住:任何XML都可以嵌入到XSLT样式表中,前提是它包装在命名空间元素(命名空间而不是XSLT命名空间)中,并且此包装元素位于全局级别(<xsl:stylesheet>(顶部)元素的子级).
II.访问驻留在单独XML文件中的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>
Run Code Online (Sandbox Code Playgroud)
如果菜单XML文件位于'menu.XML'文件中(与XSLT样式表文件位于同一目录中,则此转换将产生与上一个完全相同的结果:
<menu>
<choice>A</choice>
<choice>B</choice>
<choice>C</choice>
</menu>
Run Code Online (Sandbox Code Playgroud)
请注意:在这两种情况下,我们都使用标准的XSLT功能document()
通常,定义一个全局级变量,其值是调用document()函数的结果.然后在转换期间通过XPath表达式访问此变量及其内容.
那么,如何将XML文件包含到另一个XML文件或XSL文件中?
您可以使用外部实体来引用menu.xml文件,并将内容包含在XML文件或XSLT(或两者)中.
通过include,我的意思是从另一个文件引用/加载它,而不是复制和粘贴它或简单地嵌入它.
通过使用外部实体,您可以从外部文件引用/加载menu.xml内容,而不必复制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">
Run Code Online (Sandbox Code Playgroud)
然后可以像任何其他实体一样引用它:
&menu;
Run Code Online (Sandbox Code Playgroud)
解析XSLT时,将扩展实体引用,并将menu.xml的XML内容作为XSLT文档的一部分包含在内,就像您已复制/粘贴到实体引用所在的位置一样.