2010-12-04 177 views
5

我有一个XML模式,如:如何将一个XML文件“包含”到另一个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能够解析和理解包含这种“包含...”的文档吗?

感谢您提前帮忙!

回答

3

否这两个问题。你可以编写一些东西(比如app.config如何导入段,或者xslt如何处理包含/导入),但是这不会嵌入到任何XML规范中,也不会与现有模式匹配。基本上你必须自己做所有事情。

如果你真的想走这条路,那么编写一个自定义的XmlReader来识别一个特定的元素(在一个特定的xmlns中)并且在那个时候默默合并 - 也许会是节拍的选择。

+0

我只是在用'XInclude`(http://en.wikipedia.org/wiki/XInclude和http: /www.w3.org/TR/xinclude/),但我没有得到这个工作。当我引用XInclude命名空间时,'xi:include`元素不被识别(在VS2008中)。我想知道这是否仅仅是W3C“推荐”,这是任何人都没有实现过的。或者,我是否可以解释XInclude的目的是错误的? – Slauma 2010-12-04 13:12:45

+0

最后,我介绍了我自己的“Include”元素,并处理了整个XML文档而不使用XmlSerializer。谢谢你的提示! – Slauma 2010-12-05 23:08:57

0

如果您可以修改您的模式,您可能可以使用XML entities

+0

但这只是老式DTD的一个功能,不是在XSD模式中,不是吗? – Slauma 2010-12-04 13:17:48

相关问题