2

我希望能够从另一个 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 文件时,它会正确呈现

4

2 回答 2

2

使用外部(已解析)通用实体b.xmla.xml.

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

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

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

注意:某些浏览器具有非常严格的安全策略,这会导致从文件系统加载引用的 XML 文件和扩展实体引用时出现问题,因此如果从文件系统加载,它可能不适用于所有浏览器a.xml,但如果从文件系统加载,则可能在更多浏览器中工作网址。

于 2011-04-29T02:33:02.477 回答
1

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

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

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

<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指令是因为我不想将您与可能的无限递归混淆......

于 2011-04-28T20:48:47.837 回答