xml - 在 XML/XSL 文件中包含 XML 文件

标签 xml xslt

所以目前我正在做一些 XML-> XSLT-> (HTML5/CSS3) 的工作。现在我有一个 menu.xml 文件,我想将它包含在 XSL 文件或 XML 页面中。我进行了大量搜索,但无法找到直接的答案。

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

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

最佳答案

我。以下是如何将任何 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>(顶部)元素)。

二。访问位于单独 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>

如果菜单 XML 文件在 'menu.XML'文件(在与 XSLT 样式表文件相同的目录中,则此转换产生与之前完全相同的结果:

<menu>
   <choice>A</choice>
   <choice>B</choice>
   <choice>C</choice>
</menu>

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

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

关于xml - 在 XML/XSL 文件中包含 XML 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4703312/

相关文章:

xml - 使用自定义属性创建有效的站点地图

python - 如何使用任何 xml 库替换节点的全部内容?

xslt - 检查连续编号的属性

xml - 在 XSLT 中的 value-of 中使用 html 实体

xml - 如何在 MSXML6 上获得 max() 的等效项?

用于将 XML 转换为语法彩色 HTML 的 Java 库

java - 在 Spring 中重用 bean 定义

xslt 模式匹配转换

asp.net - 使用 SlowCheetah 和 ASP.NET 网站项目进行 Web.config 转换

xml - 使用 XSLT 从 XML 节点中删除换行符 (LF)