我希望能够从另一个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文件 正确地
答案 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
指令,因为我不想把你与无限的无限递归混为一谈......