XML:如何将一个xml文件的内容加载到另一个文件中

时间:2011-04-28 16:01:30

标签: xml xslt xquery dtd xlink

我希望能够从另一个xml文件中动态编写xml文件的内容。

A.XML包含:

<?xml version="1.0"?>
<node>
-Include Contents of b.xml
</node>

B.XML包含:

<anode>
a
</anode>

有没有办法在xml中执行此操作?

最终产品如下所示:

<?xml version="1.0"?>
<node>
  <anode>
    a
  </anode>
</node>

从评论中更新

  

仅在xml中。所以,当我查看   它呈现的浏览器中的xml文件   正确地

2 个答案:

答案 0 :(得分:2)

使用外部(已解析)通用实体引用b.xml中的a.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE node [
<!ENTITY b SYSTEM "b.xml">
]>
<node>
    &b;
</node>

XML解析器将在解析b.xml时动态包含a.xml的内容,并将生成您想要的XML。

如果您在IE中加载a.xml,它将正确呈现。

注意:某些浏览器具有非常严格的安全策略,导致从文件系统加载引用的XML文件和扩展实体引用时出现问题,因此如果您加载a.xml,它可能无法在所有浏览器中运行来自文件系统,但如果从URL加载,则可以在更多浏览器中使用。

答案 1 :(得分:1)

在浏览器中打开此XML文档时:

<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
<node>
 -Include Contents of b.xml
</node>

使用这个XSLT样式表(其他 XML文档)引用stylesheet.xsl相对URI:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="node()|@*">
        <xsl:copy>
            <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
    <xsl:template match="node">
        <xsl:copy>
            <xsl:apply-templates select="@*"/>
            <xsl:copy-of select="document('B.xml')"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

它被渲染(没有任何样式,或者使用浏览器默认的XML样式表):

<node>
    <anode>a</anode>
</node>

注意:处理指令。我使用了xsl:copy-of指令,因为我不想把你与无限的无限递归混为一谈......