0

同じXMLSchemaに基づく2つのXMLを比較しています。XML内のすべての要素にはIDがあります(idは順序について何も言いません-最も古いxmlElementが最も低いIDを持ちますなど)。私の目標は、2つのXMLS間のある種の調整を行うことです。

非常に簡単な例を挙げます。2つのxmlがあるとします。最初のものは次のようになります。

<EleType>
    <Ele id="1"/>
    <Name id="2"/>
    <Description id="100"/>
    <UnknownOrderEle1 id="3"/>
</EleType>

そしてこのような2番目のもの:

<EleType>
    <Ele id="1"/>
    <Name id="2"/>
    <Description id="100"/>
    <UnknownOrderEle2 id="4"/>
</EleType>

私の結果はIDのマッピングになるはずです。最初は1:1、次に2:2、100:100でうまくいきます。この時点で、名前が異なる2つのxml要素に出くわしました。私はそれらが一致しない可能性があることを知っているので、2つの可能な解決策は3:*(ここで* =一致しない記号)を取り、次に*:4を取るか、:4を取り、次に3を取ります。ただし、スキーマでは、UnknownOrderEle2(id = 4)がUnknownOrderEle1(id = 3)の前に来る必要があると示されているため、正しい解決策は1つだけです。

そこで、XmlSchemaクラス内で、要素の順序について何かを教えてくれるものを探しましXmlSchemaInfoXmlSchemaElement。私が見つけた唯一の2つの可能性は、時間がかかりすぎるか汚れているため、私にとって実際の解決策ではありません。LineNumber1つは、と(おそらく汚れLinePositionている)内を比較することです。XmlSchemaObjectもう1つは、2つのxmlからxmlを作成し、それを検証することです。検証例外がスローされた場合、選択した順序が間違っていたことがわかります(間違いなく時間がかかります)。

誰かがより良い解決策を知っているなら、私はどんな助けも受けてうれしいです。

4

1 に答える 1

0

例に対応するスキーマには、次のようなものが含まれている必要があります。

<xs:element name="EleType">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="Ele">
        . . .
      </xs:element>
      <xs:element name="Name">
        . . .
      </xs:element>
      <xs:element name="Description">
        . . .
      </xs:element>
      <xs:element name="UnknownOrderEle1">
        . . .
      </xs:element>
      <xs:element name="UnknownOrderEle2">
        . . .
      </xs:element>
    </xs:sequence>
  </xs:complexType>
</xs:element>

XmlSchemaElement読み込まれると、次のようなコードを使用して、対応するオブジェクトを取得し、そのサブ要素の順序を取得できます。

XmlSchemaElement element = schema.Elements[new XmlQualifiedName("EleType")];
XmlSchemaType complexType = (XmlSchemaComplexType)element.ElementSchemaType;
XmlSchemaSequence sequence = (XmlSchemaSequence)complexType.Particle;
XmlSchemaObjectCollection childElements = sequence.Items;

childElementsは、有効なサブ要素EleNameDescriptionUnknownOrderEle1UnknownOrderEle2を正しい順序で並べたリストです。

これは、スキーマが単純である限り機能しますが、型の定義が単純なシーケンスではなく、より複雑な場合choice( 、グループなどを使用)、より複雑になり、XML ファイルを作成する別の方法が必要になります。そして、それがおそらくより良くなることを検証してみてください。

于 2013-02-25T19:49:38.317 に答える