1

多くの要素を含む XSD ファイルがあります。その XSD ファイルの一部だけを使用して、着信 XML ファイルを検証する必要があります。

例えば:

これは有効な XML です

<in attr1="9" attr2="0" attr3="0" />

これが XSD ファイルです。XML ファイルを検証するために必要なのは、要素「FindPerson」の下の「In」という名前の要素だけです。

<xs:element name="WS">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="ELEMENT1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="FindPerson">
                                <xs:complexType>
                                    <xs:sequence>
                                        <xs:element name="In">
                                            <xs:complexType>
                                                <xs:attribute name="attr1" type="xs:int"/>
                                                <xs:attribute name="attr2" type="xs:boolean" use="optional" default="0"/>
                                                <xs:attribute name="attr3" type="xs:boolean" use="optional" default="0"/>
                                            </xs:complexType>
                                        </xs:element>

...

C# で XSD ファイルの一部のみを使用して XML ファイルを検証する方法はありますか?

4

2 に答える 2

1

これは、あなたの側で少し作業を行うことで実際に可能であり、切り捨てられた XSD から示唆されるように、実際に XSD がロシアンドール スタイル (すべてのコンテンツがネストされている) を使用して作成されていると仮定します。

簡単な方法は、次の手順に従うことです。

  • 元の XSD をプレーンな XML ファイルとして読み取ります。XPath を使用して使用するノードを見つけ、それを保持します。
  • 新しい XML ドキュメントを作成します。適切な名前空間を使用して、スキーマとなるドキュメント要素を作成します。適切な値を持つ targetNamespace の属性を作成する (または作成しない)。elementFormDefault についても同様です。
  • 上記で作成したスキーマ要素の下にInノード定義をディープ クローンおよびコピーします。
  • 新しく作成したドキュメント要素ノードから XmlNodeReader を作成します。
  • XmlSchema.Read(nodeReader) を使用してスキーマを読み取る
  • XmlSchemaSet を使用してコンパイルします。成功した場合は、そのスキーマ セットを使用して検証します。

ここでの考え方は、飛行中に必要なスキーマをメモリ内に作成することです。コンテンツ モデルがより複雑な場合 (ロシア人形ではない場合)、物事は簡単に複雑になり、実現不可能になる可能性があります。

于 2012-04-25T14:40:47.410 に答える
0

XSD を再構築する必要があります。すべての要素を兄弟にします (トップ レベルで)。element ref=...それらの関係を定義するときに、一方を他方から参照するために使用します。その後、XSD は最上位の要素を検証できるようになります。

于 2012-04-25T13:46:21.683 に答える