如何将一个XML文件“包含”到另一个XML文件中?

时间:2010-12-04 12:39:31

标签: .net xml xsd xmlserializer

我有一个XML架构,如:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="MySchema"
    targetNamespace="http://tempuri.org/MySchema.xsd"
    elementFormDefault="qualified"
    xmlns="http://tempuri.org/MySchema.xsd"
    xmlns:mstns="http://tempuri.org/MySchema.xsd"
    xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:element name="MyDocument">
    <xs:complexType>
      <xs:all>
        <xs:element name="TextHeader" type="xs:string" minOccurs="0" />
        <xs:element name="TextBody" type="xs:string" minOccurs="0" />
      </xs:all>
    </xs:complexType>
  </xs:element>
</xs:schema>

根据此架构的有效XML文档将是:

<?xml version="1.0" encoding="utf-8" ?>
<MyDocument xmlns="http://tempuri.org/MySchema.xsd">
  <TextHeader>My header which is almost always the same...</TextHeader>
  <TextBody>My text body which is always different...</TextBody>
</MyDocument>

问题1:有没有办法从其他文件中“包含”TextHeader元素?

像这样:

文件“Header.xml”:

<?xml version="1.0" encoding="utf-8" ?>
<MyDocument xmlns="http://tempuri.org/MySchema.xsd">
  <TextHeader>My Header which is almost always the same...</TextHeader>
</MyDocument>

文件“CompleteDocument.xml”:

<?xml version="1.0" encoding="utf-8" ?>
<MyDocument xmlns="http://tempuri.org/MySchema.xsd">

  include "Header.xml" ???

  <TextBody>My text body which is always different...</TextBody>
</MyDocument>

问题2:如果可能的话,.NET XMLSerializer是否能够解析并理解包含此类“include ...”的文档?

提前感谢您的帮助!

3 个答案:

答案 0 :(得分:3)

两个问题都没有。您可以编写代码(例如app.config如何允许导入节,或者xslt如何处理包含/导入),但这不是内置于任何XML规范上,并且与现有模式不匹配。基本上,你必须自己做所有事情。

如果您真的想要走这条路线,那么编写一个识别特定元素(在特定xmlns中)并在该点静默合并的自定义XmlReader可能是最佳选择。

答案 1 :(得分:0)

如果您可以修改架构,则可以使用XML entities

答案 2 :(得分:0)

第一个问题的答案是肯定的。您可以执行xInclude以获取主文件(http://www.w3.org/TR/xinclude/

中包含的内容