XML-引用其他XML文件
我是XML新手,所以这可能是一个相当容易回答的问题。我想知道是否有从其他XML文件中引用外部XML文件的标准方法。让我举个例子。假设您有一个文件,该文件定义了一个包含大量数据的对象:XML-引用其他XML文件,xml,cross-reference,Xml,Cross Reference,我是XML新手,所以这可能是一个相当容易回答的问题。我想知道是否有从其他XML文件中引用外部XML文件的标准方法。让我举个例子。假设您有一个文件,该文件定义了一个包含大量数据的对象: <person> <name>John</name> <age>18</age> <hair>Brown</hair> <eyes>Blue</eyes> </perso
<person>
<name>John</name>
<age>18</age>
<hair>Brown</hair>
<eyes>Blue</eyes>
</person>
约翰
18
棕色的
蓝色
为了回答这个问题,假设此人持有大量其他信息。假设文件大小为10 MB
现在,假设您有另一个定义组的XML文件:
<group>
<person>
<name>John</name>
<age>18</age>
<hair>Brown</hair>
<eyes>Blue</eyes>
</person>
<person>
<name>Kim</name>
<age>21</age>
<hair>Blue</hair>
<eyes>Green</eyes>
</person>
<person>
<name>Sean</name>
<age>22</age>
<hair>Black</hair>
<eyes>Brown</eyes>
</person>
</group>
约翰
18
棕色的
蓝色
基姆
21
蓝色
绿色
肖恩
22
黑色
棕色的
如您所见,如果Person的文件非常大,那么组文件将非常大。那么,如果我们有类似于John.xml的东西,有没有一种标准方法可以在Group.xml中引用它,而不显式地定义John的所有数据?我相信这是一个非常广泛的话题,所以请随时将我链接到任何相关的网页。谢谢 嗯,xml文件没有大小限制。你不应该担心超大尺寸。但请记住;Xml是一种数据交换格式,而不是数据库格式。您可以使用xml在不同的应用程序/服务之间交换数据。对于这样导入节点,没有标准(在每个解析器中都适用)。但是,您可以通过将中的某些元素更改为属性来节省空间
<group>
<person name='John' age='18' hair='Brown' eyes='Blue' />
<person name='Kim' age='21' hair='Blue' eyes='Green' />
<person name='Sean' age='22' hair='Black' eyes='Brown' />
</group>
有两种“标准”方法可以做你想做的事情,即(取决于你想做什么),不过你必须确保你有一个可以拉入外部引用的处理器。大多数XML库都没有启用此功能
然后你就可以做点什么了:
然而,你可能并不真的需要这个。如果您需要一个大型文档中的信息子集,那么可以轻松地使用XSLT或XQuery删除您需要的部分。您可以使用这种方法,再加上SAX解析(基于事件,并且没有整个文档在内存中),来扩展应用程序以处理相当大的文档
即使在使用DOM时,我也没有发现大型文档的问题,直到它们在数十兆字节的范围内。是DTD的XML规范,您可以在其中声明实体引用
一个简单的文档,如:
<!DOCTYPE test [
<!ENTITY ref SYSTEM "file:///C:/test.txt" >
]>
<test>
&ref;
</test>
&ref;
及file:///C:/test.txt 是:
<blah>
Fee
Fi
Fo
Fum
</blah>
费用
Fi
法罗群岛
烟
将原始文档扩展为:
<test>
<blah>
Fee
Fi
Fo
Fum
</blah>
</test>
费用
Fi
法罗群岛
烟
我相信扩展引用不需要非验证性XML解析器,所以在这方面要小心
另外,不要忘记在XMLDecl中输入standalone=“no”。(没有独立属性假定它等于“否”,但最好将它放在那里……标准
是唯一具有任何级别支持的标准
- 几个XML编辑器,包括并支持它
- 包括在内的几个XML解析器也支持它,并且还有.net端口
- 一些XML工具,例如支持Java和XML
- 使用流式XML处理器,例如(或在较小程度上),它只在内存中保留解决查询所需的信息
- 使用XML数据库,如或
- 使用一个XML文件列出其他XML文件的名称,然后一些用XQuery或XSLT编写的程序使用
函数和进程读取这些文件。(除非您的处理器正在进行流式处理,或者有办法处理完文件,否则您仍然会遇到相同大小的问题。)doc()
<test>
<blah>
Fee
Fi
Fo
Fum
</blah>
</test>