3

取得したデータが有効かどうかを検証できるように、システム間で使用する XML ファイルの XSD を生成する必要があります。

XML は次のようになります (ただし、より多くのフィールドがあります)。

<Request>
<Request_ID>1000012295</Request_ID>
<Extra_Info>
  <Item>
    <Item_Number>0000000001</Item_Number>
    <ItemDescription>test- 2</ItemDescription>    
  </Item>
  <Item>
    <Item_Number>0000000002</Item_Number>
    <ItemDescription>test - 2</ItemDescription>
  </Item>
</Extra_Info>
</Request>

私のXSDは次のとおりです。

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="Request">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="Request_ID" type="xsd:int" />
        <xsd:element name="Extra_Info">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="Item">
                <xsd:complexType>
                  <xsd:sequence>
                    <xsd:element name="Item_Number" type="xsd:int" />
                    <xsd:element name="ItemDescription" type="xsd:string" />
                  </xsd:sequence>
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
      </xsd:sequence>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

このスキーマは、ノードが 1 つしかない場合は機能しItemますが、ノードが複数あるとすぐに次のエラーが発生します。

要素 'Extra_Info' に無効な子要素 'Item' があります。

シーケンスとして指定されている場合、なぜ機能しないのですか?

ありがとう!

PS:迅速な検証のためにThis Online Validatorを使用しましたが、XMLReader でも同じエラーが発生します。

4

2 に答える 2

3

デフォルトでは、要素の最小値と最大値は、シーケンス内で定義されている場合でも 1 に設定されます

Extra_Info 要素の定義は次のようになります。

<xsd:element name="Extra_Info">
  <xsd:complexType>
    <xsd:sequence>
      <xsd:element name="Item" maxOccurs="unbounded">
        <xsd:complexType>
          <xsd:sequence>
            <xsd:element name="Item_Number" type="xsd:int" />
            <xsd:element name="ItemDescription" type="xsd:string" />
          </xsd:sequence>
        </xsd:complexType>
      </xsd:element>
    </xsd:sequence>
  </xsd:complexType>
</xsd:element>

注: これらの要素を 1 つ以上持つことができることを示す unbounded 属性。

minOccurs='0' を item 要素に追加すると、任意の数のアイテムを取得できます。これにより、次のようになります。

<xsd:element name="Item" maxOccurs="unbounded" minOccurs="0">
于 2011-03-08T18:25:31.653 に答える
2

xsd ファイルmaxOccurs="unbounded"の要素に属性を追加する必要があります。Item

于 2011-03-08T18:19:40.783 に答える