首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XML/XSL文件中包含XML文件

在XML/XSL文件中包含XML文件
EN

Stack Overflow用户
提问于 2011-01-16 09:46:54
回答 5查看 38.6K关注 0票数 24

因此,目前我正在做一些XML-> XSLT-> (HTML5/CSS3)工作。现在我有一个menu.xml文件,我想把它包含在XSL文件或XML页面中。我做了很多搜索,但我找不到一个直接的答案。

那么,如何将XML文件包含到另一个XML文件或XSL文件中呢?

编辑:我所说的包含,是指从另一个文件引用/加载它,而不是复制和粘贴它或简单地嵌入它。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-16 11:21:11

下面介绍了如何将任何文档或片段嵌入到XSLT样式表中,并在转换期间使用它们。

代码语言:javascript
复制
<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)

代码语言:javascript
复制
<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菜单文件

要做到这一点,我们只需稍微更改前面的示例:

代码语言:javascript
复制
<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' 文件中(位于与样式表文件相同的目录中,则此转换生成的结果与前面的结果完全相同:

代码语言:javascript
复制
<menu>
   <choice>A</choice>
   <choice>B</choice>
   <choice>C</choice>
</menu>

请注意:在这两种情况下,我们都使用标准的函数

通常,定义一个全局级别的变量,它的值是调用document()函数的结果。然后,在转换期间通过XPath表达式访问该变量及其内容。

票数 37
EN

Stack Overflow用户

发布于 2011-01-16 23:17:43

那么,如何将一个

文件包含到另一个或某个XSL文件中呢?

您可以使用 来引用menu.xml文件,并将其内容包含到XML文件和/或XSLT中。

所说的包含,我的意思是从另一个文件引用/加载它,而不是复制和粘贴它或简单地嵌入它。

通过使用外部实体,您可以从外部文件引用/加载menu.xml内容,而不必复制该内容。

例如,如果希望在XSLT中包含menu.xml内容,则可以在XSLT中声明外部实体,如下所示:

代码语言:javascript
复制
<?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">

然后可以像引用任何其他实体一样引用它:

代码语言:javascript
复制
&menu;

在解析XSLT时,实体引用将被展开,menu.xml的XML内容将作为XSLT文档的一部分包括在内,就像您已经将其复制/粘贴到实体引用所在的位置一样。

票数 5
EN

Stack Overflow用户

发布于 2013-09-24 18:32:20

我让a blog post负责这件事。您可以使用document()来获取另一个XML,并使用参数传递内容。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4703312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档