2010-12-04 15 views
5

私のようなXMLスキーマがあります。1つの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仕様には組み込まれておらず、既存のスキーマとは一致しません。あなたは基本的にすべてをやる必要があります。

実際にこのルートに行きたい場合は、特定の要素(特定のxmlns内にある)を認識し、その時点で静かにマージするカスタムXmlReaderを作成することが、おそらくビートの選択になります。

+0

私はちょうどXInclude(http://en.wikipedia.org/wiki/XIncludeとhttp: /www.w3.org/TR/xinclude/)しかし、私はこれを動作させませんでした。 XInclude名前空間を参照すると、(VS2008の) 'xi:include'要素が認識されません。私はこれが誰にも決して実装されていないW3Cの「勧告」であるかどうか疑問に思います。あるいは、XIncludeの目的を間違って解釈しているのでしょうか? – Slauma

+0

最後に、独自の「インクルード」要素を導入し、XmlSerializerを使用せずにXML文書全体を処理しました。ヒントをありがとう! – Slauma

0

スキーマを変更できる場合は、XML entitiesを使用できる場合があります。

+0

しかし、それはXSDスキーマではなく、昔ながらのDTDのための機能にすぎませんか? – Slauma

+0

確かに、古くなっているため正確にサポートされています。 –

0

最初の質問に対する回答は「はい」です。 xIncludeを使ってマスターファイルに含まれているコンテンツを取得することができます()

+0

それは簡単ではありません。 'xinclude'は幅広く実装されていないw3c *勧告です。 (それはおそらく私がそれを働かせなかった理由です、受け入れられた答えの下で私のコメントを参照してください。)たとえば、サードパーティのツールと拡張機能に依存しなければならない場合、 //stackoverflow.com/questions/14809487/alternative-to-xinclude – Slauma

関連する問題