从其他文件重用XML元素

时间:2010-07-22 18:19:23

标签: xml

是否可以在另一个XML中使用其他文件中的XML元素? 例如,而不是:

<document>
   <a><!-- huge content --></a>
   <b/>
</document>

我想:

<document>
    <a ref="aDef"/>
    <b/>
</document>

在哪里定义自己的XML并在需要的地方重用。 我希望解析器完成此操作并对应用程序透明,应用程序无法知道元素是引用还是副本。
我怎么能这样做?

2 个答案:

答案 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>