是否可以在另一个XML中使用其他文件中的XML元素? 例如,而不是:
<document>
<a><!-- huge content --></a>
<b/>
</document>
我想:
<document>
<a ref="aDef"/>
<b/>
</document>
在哪里定义自己的XML并在需要的地方重用。
我希望解析器完成此操作并对应用程序透明,应用程序无法知道元素是引用还是副本。
我怎么能这样做?
答案 0 :(得分:3)
这是xinclude W3C标准的用途。与外部实体方法类似(如上面的答案),您可以将要包含的内容编码在单独的文件中,例如, (frag.xml):
<a><!-- huge content --></a>
在主XML文件中,xinclude指令引用此外部内容:
<document>
<xi:include href="frag.xml" xmlns:xi="http://www.w3.org/2001/XInclude"/>
<b/>
</document>
当使用(支持xinclude)XML处理器(例如Xerces http://xerces.apache.org/
)处理时,解析器将使用它指向的内容扩展此xinclude指令。 @href属性中的包含目标被解释为URI,因此您可以使用片段标识符(例如href="frag.xml#fragment1
)同等地指向片段。
除了@href中的简单URI之外,xinclude标准还支持非常细粒度的词汇表,用于在@xpointer属性中表达包含目标。但是,对复杂XPointer表达式的支持取决于处理器的XPointer合规性,这通常未被充分利用。但是,还有一个(最小的)XSLT实现:XIPr(http://dret.net/projects/xipr/
)。
答案 1 :(得分:2)
这是一个选择:
片段XML文件(frag.xml):
<a><!-- huge content --></a>
主XML文件:
<!DOCTYPE document [
<!ENTITY aDef SYSTEM "frag.xml">
]>
<document>
&aDef;
<b/>
</document>