2012-02-10 8 views
2

現在、XPath表記を使用してXmlDocumentに要素を追加しています。この要素には、要素をファイルの適切な場所に配置するコードを記述しています。 1つの例外を除いて。私は自分のXSDファイルで定義されているシーケンスルールに注意を払う方法を知らない。XSDに準拠するXmlDocumentに新しい要素を追加する

XmlDocumentに要素を追加して、XMLファイルを管理するXSDのシーケンス定義に準拠する方法はありますか?

<rootTag> 
    <area name="I define an area"> 
    <point x="1" y="1" /> 
    <point x="2" y="2" /> 
    <point x="3" y="3" /> 
    <description>some text here</description> 
    </area> 
</rootTag> 

修正するには:私は、ユーザーが上記の子タグの値が入った順番に応じて、取得しかし

<rootTag> 
    <area name="I define an area"> 
    <description>some text here</description> 
    <point x="1" y="1" /> 
    <point x="2" y="2" /> 
    <point x="3" y="3" /> 
    </area> 
</rootTag> 

例えば、私のXML文書は次のようになります。上の例では、XSDファイルからDataSet(tempXmlDatasetという名前)を作成します。私は、XmlDocumentの内容をtempXmlDatasetに渡し、物事が適切に並べ替えられます。

しかし、私の問題は、XMLドキュメントの最初の子のオプションによって発生します。このオプションは、「エリア」、「ライン」、または「ポイント」オブジェクトを許可するようにXSDで定義されています。 "area"と "line"はどちらも子として "point"要素を持っています。しかし、子供の「ポイント」は「ポイント」オブジェクトと同じではありません。したがって、すでに理解しているように、tempXmlDataset.ReadXmlSchema(...)はxとyのみを持つ "ポイント"テーブルを作成します。これは、 "area"と "line"の子の定義によるものです。

私のコードがtempXmlDataset.ReadXml(...)を実行するとき、 "point"オブジェクトの属性は "point"オブジェクトを子 "point"と見なして読み込まれません。ここでは「点」オブジェクトの例です:あなたはこのC#]をタグ付けするので

<rootTag> 
    <point name="I define a point" x="3" y="3" otherAttributes=""> 
    <description>some text here</description> 
    </point> 
</rootTag> 
+0

は、あなたのプログラムが実行されるスキーマ文書へのアクセス権を持っていますか?その場合、BCLはスキーマに次に何が来るべきかを尋ねる方法を提供します。 –

+0

私は実行時にスキーマを持っています。 「BCL」は何を表していますか?基本クラスのライブラリ?? –

+1

Yep、System.Xml.Schema。具体的には、[このMSDN記事の](http://msdn.microsoft.com/en-us/library/system.xml.schema.xmlschemainfo.aspx)のサンプルコードを見てください。特に 'XmlSchemaParticle [] particles = validatorの呼び出しに注意してください。GetExpectedParticles(); ' –

答えて

0

使用が発生しXsd.exeではクラスのxsdに基づいて必要なコード。このケースのデータセットを作成しようとしないでください。生成されたコードをXmlSerializerと共に使用して、必要なxmlファイルを生成することができます。

http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

も参照してください: http://msdn.microsoft.com/en-us/library/ms950721.aspx

+0

.NET 1.1に関する質問がない限り、.NET 1.1リンクを投稿しないでください。さもなければ、読者は10年前から一連のリンクに立ち往生してしまうでしょう。 –

1

、私はあなたが.NETプラットフォームにしていると仮定します。 System.Xml.Schemaはあなたの親友です。上記のAPIを使用してXMLを生成するプログラムについては、問題の解決方法を理解するために使用できるソースコードも付属していますので、XmlSampleGeneratorを使用します。

サンプルXMLを生成するには、ユーザーが指定した時点で入力できるXPathを制約するという点で必要なものだけが必要です。私は、最初から編集プロセスのどこにいるかに基づいて許可するXPathを制約しなければならないと考えています。そうしないと、1つのミスが全体のアプローチを役に立たなくする可能性があります。

あなたが最初から制約されない場合は、XSDに基づいて再オーダーしようとすることは不可能かもしれません(SOにもthisをお読みください)...

+0

ありがとう!あなたは正しいです。 –

関連する問題