我有一个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 ...”的文档?
提前感谢您的帮助!
答案 0 :(得分:3)
两个问题都没有。您可以编写代码(例如app.config如何允许导入节,或者xslt如何处理包含/导入),但这不是内置于任何XML规范上,并且与现有模式不匹配。基本上,你必须自己做所有事情。
如果您真的想要走这条路线,那么编写一个识别特定元素(在特定xmlns中)并在该点静默合并的自定义XmlReader可能是最佳选择。
答案 1 :(得分:0)
如果您可以修改架构,则可以使用XML entities。
答案 2 :(得分:0)
第一个问题的答案是肯定的。您可以执行xInclude以获取主文件(http://www.w3.org/TR/xinclude/)
中包含的内容