我们可以将XML文件导入另一个XML文件吗?

Sum*_*mit 80 xml import merge file

我们可以将XML文件导入另一个XML文件吗?

我的意思是XML中有任何导入标记,它将XML路径作为参数并导入XML(为其提供路径).

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)

一些可能有用的参考资料:

  • 我对.NET api不太熟悉.但是,您可能需要查看`XMLResolver`属性的设置.如果未在XMLDocument对象上设置XMLResolver属性,则可能无法加载外部资源.http://msdn.microsoft.com/en-us/library/5fcwybb2.aspx (3认同)
  • 浏览器可能出于本地文件的安全原因禁用此功能.使用--allow-file-access-from-files切换chrome或上传到主机 (3认同)
  • 像chrome这样的浏览器能理解这个吗? (2认同)

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)