2012-02-19 2 views
0

Я извлекаю некоторый xml из статической формы XFA. Вот пример:XML Validation C# - Complex Type

<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» не может содержать «значение» дочерний элемент, так как модель содержимого родительского элемента пуст.

+0

Ваш вопрос не понятен; что это не нормально, какую конкретную ошибку или неожиданное поведение вы видите? –

+0

Я только что добавил ошибку, спасибо, что указал на это –

ответ

1

Ваше определение 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> 
+0

Спасибо, это все работает, стыдно, что Xsd.exe этого не делает по умолчанию! –