2015-08-05 5 views
0

Получение действительно странной проблемы сегодня при попытке проверить XML с помощью XSD. Глядя на XML, который я предоставляю, он выглядит правильно.XDocument.Validate return Элемент имеет недопустимый дочерний элемент

Ошибка я получаю от XDocument.Validate является: Элемент «НАЗНАЧЕНИЯ» был недействительным дочерний элемент «НАЗНАЧЕНИЯ»

Вот XML я использую:

<PATIENTS> 
    <PATIENT> 
     <APPOINTMENTS> 
      <APPOINTMENT> 
       <UserInitials>123</UserInitials> 
       <Date>Some Date</Date> 
       <ApptTime>14:30</ApptTime> 
       <Duration>00:15</Duration> 
       <AppointmentStatus>Complete</AppointmentStatus> 
       <Notes>Some note</Notes> 
       <TreatmentType>Some Appoinment type</TreatmentType> 
      </APPOINTMENT> 
     </APPOINTMENTS> 
    </PATIENT> 
</PATIENTS> 

И файл XSD я против проверки:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified"> 
<xs:element name="PATIENTS"> 
    <xs:complexType> 
    <xs:sequence> 
     <xs:element name="PATIENT" minOccurs="1"> 
     <xs:complexType> 
      <xs:sequence> 
      <xs:element name="APPOINTMENTS" minOccurs="0"> 
       <xs:complexType> 
       <xs:sequence> 
        <xs:element name="APPOINTMENT" minOccurs="0"> 
        <xs:complexType> 
         <xs:sequence> 
         <xs:element name="UserInitials" type="xs:string" minOccurs="1"></xs:element> 
         <xs:element name="Date" type="xs:string" minOccurs="1"></xs:element> 
         <xs:element name="ApptTime" type="xs:string" minOccurs="1"></xs:element> 
         <xs:element name="Duration" type="xs:string" minOccurs="1"></xs:element> 
         <xs:element name="AppointmentStatus" type="xs:string" minOccurs="1"></xs:element> 
         <xs:element name="LegacyTypeID" type="xs:string" minOccurs="0"></xs:element> 
         <xs:element name="AClinic" minOccurs="0"></xs:element> 
         <xs:element name="Notes" type="xs:string" minOccurs="0"></xs:element> 
         <xs:element name="Info" type="xs:string" minOccurs="0"></xs:element> 
         <xs:element name="TreatmentType" type="xs:string" minOccurs="0" default="Examination"></xs:element> 
         </xs:sequence> 
        </xs:complexType> 
        </xs:element> 
       </xs:sequence> 
       </xs:complexType> 
      </xs:element> 
      </xs:sequence> 
     </xs:complexType> 
     </xs:element> 
    </xs:sequence> 
    </xs:complexType> 
</xs:element> 
</xs:schema> 

Я не совсем понимаю, что происходит, похоже, что теги Appointments и Appointments соответствуют XSD-файлу.

Остальная часть документа XML выглядит корректно, если только не возникает проблема с файлом XSD.

У меня есть другие элементы внутри моего пациента, которые работают нормально.

+1

Я не могу воспроизвести проблему с консольным приложением .NET 4.5 C#, выполняющим 'XmlSchemaSet schemaSet = новый Xml SchemaSet(); schemaSet.Add (null, "../../XMLSchema1.xsd"); XDocument doc = XDocument.Load ("../../ XMLFile1.xml"); doc.Validate (schemaSet, (o, valArgs) => { Console.WriteLine ("{0}: {1}", valArgs.Severity, valArgs.Message); }); 'и ваши предоставленные файлы. –

+0

Спасибо за быстрый ответ Мартин, я также пробовал, что вы сделали, это должно быть что-то перед элементом Appointment/Appointments, вызывающим проблему, поскольку это сработало, когда я просто использовал эти файлы. –

+0

Можете ли вы предоставить какие-либо образцы, позволяющие нам воспроизвести проблему? –

ответ

0

Я разработал проблему, на самом деле я пропустил часть XML, чтобы показать вам.

я должен был включать следующее:

<?xml version="1.0" encoding="utf-8" ?> 
<PATIENTS> 
    <PATIENT> 
    <APPOINTMENTS> 
     <APPOINTMENT> 
     <UserInitials>123</UserInitials> 
     <Date>Some Date</Date> 
     <ApptTime>14:30</ApptTime> 
     <Duration>00:15</Duration> 
     <AppointmentStatus>Complete</AppointmentStatus> 
     <Notes>Some note</Notes> 
     <TreatmentType>Some Appoinment type</TreatmentType> 
     </APPOINTMENT> 
     <APPOINTMENT> 
     <UserInitials>123</UserInitials> 
     <Date>Some Date</Date> 
     <ApptTime>14:30</ApptTime> 
     <Duration>00:15</Duration> 
     <AppointmentStatus>Complete</AppointmentStatus> 
     <Notes>Some note</Notes> 
     <TreatmentType>Some Appoinment type</TreatmentType> 
     </APPOINTMENT> 
     <APPOINTMENT> 
     <UserInitials>123</UserInitials> 
     <Date>Some Date</Date> 
     <ApptTime>14:30</ApptTime> 
     <Duration>00:15</Duration> 
     <AppointmentStatus>Complete</AppointmentStatus> 
     <Notes>Some note</Notes> 
     <TreatmentType>Some Appoinment type</TreatmentType> 
     </APPOINTMENT> 
    </APPOINTMENTS> 
    </PATIENT> 
</PATIENTS> 

Я На самом деле есть несколько записей в пределах НАЗНАЧЕНИЯ элементов, что требует файл XSD иметь следующие на НАЗНАЧЕНИЯ элемент:

<xs:element name="APPOINTMENT" minOccurs="0" maxOccurs="unbounded"> 

Мне не хватало атрибута maxOccurs="unbounded"

Смежные вопросы