Mad*_*sen 89
你声明这样的实体:
<!ENTITY otherFile SYSTEM "otherFile.xml">
Run Code Online (Sandbox Code Playgroud)
然后你像这样引用它:
&otherFile;
Run Code Online (Sandbox Code Playgroud)
一个完整的例子:
<?xml version="1.0" standalone="no" ?>
<!DOCTYPE doc [
<!ENTITY otherFile SYSTEM "otherFile.xml">
]>
<doc>
<foo>
<bar>&otherFile;</bar>
</foo>
</doc>
Run Code Online (Sandbox Code Playgroud)
当XML解析器读取文件时,它将扩展实体引用并将引用的XML文件包含在内容中.
如果"otherFile.xml"包含: <baz>this is my content</baz>
然后,XML将被XML解析器评估并"看到":
<?xml version="1.0" standalone="no" ?>
<doc>
<foo>
<bar><baz>this is my content</baz></bar>
</foo>
</doc>
Run Code Online (Sandbox Code Playgroud)
一些可能有用的参考资料:
Vot*_*fee 22
其他答案涵盖了两种最常见的方法,Xinclude和XML外部实体.微软有一个非常好的文章,说明为什么人们应该更喜欢Xinclude,以及几个示例实现.我引用了下面的比较:
根据http://msdn.microsoft.com/en-us/library/aa302291.aspx
为什么XInclude?
人们可能会问的第一个问题是"为什么使用XInclude而不是XML外部实体?" 答案是XML外部实体具有许多众所周知的局限性和不便的影响,这有效地阻止了它们成为通用的包含设施.特别:
- XML外部实体不能是一个完整的独立XML文档 - 既不允许独立的XML声明也不允许Doctype声明.这实际上意味着XML外部实体本身不能包含其他外部实体.
- XML外部实体必须是格式良好的XML(乍一看并不是那么糟糕,但想象一下,您希望将示例C#代码包含在XML文档中).
- 无法加载外部实体是一个致命的错误; 任何恢复都是严格禁止的.
- 可以仅包括整个外部实体,不能仅包括文档的一部分. - 必须在DTD或内部子集中声明外部实体.这将打开一个充满含义的潘多拉魔盒,例如必须在Doctype声明中命名文档元素,并且验证读者可能要求在DTD中定义文档的完整内容模型.
使用XML外部实体作为包含机制的缺陷已经有一段时间了,并且实际上产生了由Microsoft和IBM在1999年向W3C提交XML包含提议.该提案为通用XML包含工具定义了处理模型和语法.
四年后,XML Inclusions的1.0版本,也称为Xinclude,是一个候选推荐标准,这意味着W3C认为它已经被广泛审查并且满足了它要解决的基本技术问题,但还不是全程推荐.
另一个提供各种示例实现的好站点是https://www.xml.com/pub/a/2002/07/31/xinclude.html.以下是其网站的常见用例示例:
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<title>The Wit and Wisdom of George W. Bush</title>
<xi:include href="malapropisms.xml"/>
<xi:include href="mispronunciations.xml"/>
<xi:include href="madeupwords.xml"/>
</book>
Run Code Online (Sandbox Code Playgroud)