Проверка XML c # - сложный тип - PullRequest
0 голосов
/ 19 февраля 2012

Я извлекаю некоторые xml из статической формы XFA.Вот пример:

<xfa:datasets xmlns:xfa="http://www.xfa.org/schema/xfa-data/1.0/">
<xfa:data>
<frmMain>
<InspectionDate>19/02/2012</InspectionDate>
<ENID>111114567</ENID>
<EmployeeNumber>1234</EmployeeNumber>
<GroundType>
   <value>Tarmac</value>
   <value>Concrete</value>
</GroundType>
<Width>800</Width>
<Height>900</Height>
<OtherDetails>Corssing of x road and y street</OtherDetails>
</frmMain>
</xfa:data>
</xfa:datasets>

Я использую утилиту Windows SDK 7.0 Xsd.exe для генерации схемы, чтобы я мог проверить этот XML на соответствие Вот оно:

<?xml version="1.0" encoding="utf-8"?>
<xs:schema id="datasets" targetNamespace="http://www.xfa.org/schema/xfa-data/1.0/" xmlns:mstns="http://www.xfa.org/schema/xfa-data/1.0/" xmlns="http://www.xfa.org/schema/xfa-data/1.0/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" attributeFormDefault="qualified" elementFormDefault="qualified">
  <xs:attribute name="dataNode" msdata:Prefix="xfa" type="xs:string" />
  <xs:element name="datasets" msdata:IsDataSet="true" msdata:Locale="en-US" msdata:Prefix="xfa">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="data" msdata:Prefix="xfa">
          <xs:complexType>
            <xs:sequence>
              <xs:element name="frmMain" form="unqualified">
                <xs:complexType>
                  <xs:sequence>
                    <xs:element name="InspectionDate" form="unqualified" type="xs:string" minOccurs="0" />
                    <xs:element name="ENID" form="unqualified" type="xs:string" minOccurs="0" />
                    <xs:element name="EmployeeNumber" form="unqualified" type="xs:string" minOccurs="0" />
                    <xs:element name="Width" form="unqualified" type="xs:string" minOccurs="0" />
                    <xs:element name="Height" form="unqualified" type="xs:string" minOccurs="0" />
                    <xs:element name="OtherDetails" form="unqualified" type="xs:string" minOccurs="0" />
                    <xs:element name="GroundType" form="unqualified" minOccurs="0" maxOccurs="unbounded">
                      <xs:complexType>
                        <xs:attribute ref="mstns:dataNode" />
                      </xs:complexType>
                    </xs:element>
                  </xs:sequence>
                </xs:complexType>
              </xs:element>
            </xs:sequence>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

Я использую XmlReaderSettingsс XmlReader для чтения и проверки Xml по Xsd.Все хорошо, пока у меня нет сложного типа.Но в этом случае у меня есть.

Что можно сделать?

И ошибка, которую я получаю:

Элемент 'GroundType' не может содержать значение дочернего элемента ''потому что модель содержимого родительского элемента пуста.

1 Ответ

1 голос
/ 19 февраля 2012

Ваше определение GroundType должно выглядеть следующим образом:

<xs:element name="GroundType" form="unqualified" minOccurs="0" maxOccurs="unbounded">
    <xs:complexType>
        <xs:sequence>
            <xs:element name="value" form="unqualified" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
        </xs:sequence>
        <xs:attribute ref="mstns:dataNode"/>
    </xs:complexType>
</xs:element>
...