我们可以将XML文件导入另一个XML文件吗?
我们可以将XML文件导入另一个XML文件吗?
我的意思是在XML中有任何以XMLpath为参数并导入XML(为其提供path)的导入标记。
你可以使用一个外部(parsing)的通用实体 。
你声明这样的实体:
<!ENTITY otherFile SYSTEM "otherFile.xml">
那么你这样引用它:
&otherFile;
一个完整的例子:
<?xml version="1.0" standalone="no" ?> <!DOCTYPE doc [ <!ENTITY otherFile SYSTEM "otherFile.xml"> ]> <doc> <foo> <bar>&otherFile;</bar> </foo> </doc>
当XMLparsing器读取文件时,它将扩展实体引用,并将引用的XML文件作为内容的一部分。
如果“otherFile.xml”包含: <baz>this is my content</baz>
然后,XML将被XMLparsing器评估和“看到”为:
<?xml version="1.0" standalone="no" ?> <doc> <foo> <bar><baz>this is my content</baz></bar> </foo> </doc>
一些可能有用的参考资料:
这个特性被称为XML包含(XInclude) 。 一些例子:
其他答案涵盖了两种最常见的方法,Xinclude和XML外部实体。 微软对于为什么更喜欢Xinclude以及几个示例实现有很好的评论。 我引用了下面的比较:
根据http://msdn.microsoft.com/en-us/library/aa302291.aspx
为什么包含?
可能会问的第一个问题是“为什么使用XInclude而不是XML外部实体?” 答案是XML外部实体有一些众所周知的局限性和不便的含义,这就有效地阻止了它们成为通用的包含工具。 特别:
- XML外部实体不能是一个完整的独立XML文档 – 既不允许独立的XML声明,也不允许Doctype声明。 这实际上意味着XML外部实体本身不能包含其他外部实体。
- 一个XML外部实体必须是格式良好的XML(乍一看并不是那么糟糕,但想象一下,你想要在你的XML文档中包含示例C#代码)。
- 未能加载外部实体是一个致命错误; 任何恢复是严格禁止的。
- 只有整个外部实体可能被包括在内,没有办法只包括文件的一部分。 – 外部实体必须在DTD或内部子集中声明。 这将打开一个充满含义的潘多拉魔盒,例如文档元素必须在Doctype声明中命名,validation读者可能要求在DTD中定义文档的完整内容模型等等。
使用XML外部实体作为包含机制的缺陷已经有一段时间了,实际上是由微软和IBM在1999年提交了W3C提交的XML包含提案。 该提案为通用XML包含设施定义了处理模型和语法。
四年后,1.0版本的XML包含,也被称为Xinclude,是一个候选推荐,这意味着W3C认为它已经被广泛的审查,并且满足了它所要解决的基本技术问题,但还不是一个完整的build议。
另一个提供各种示例实现的好站点是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>