2014-12-08 6 views
0


Я новичок в проверке схемы, и у меня есть код, который выполняет проверку схемы с помощью «ValidationType.Schema».
Есть несколько тегов, которые являются необязательными в моем выходном файле XML, и для проверки этого я установил соответствующие теги файла XSD как «MinOccurs = 0», однако я все еще получаю ошибки проверки схемы с ошибками.
Я не могу понять, является ли SEQUENCE, в которой теги упоминаются в XSD, также имеет значение SEQUENCE из тегов в XML-файле или это только подтверждает достоверность.
Ex:
ПРИМЕР 1:
--- ВЫВОД XML ---
<tag1>1</tag1>
<tag2>2</tag2>
---- XSD файлов
<tag1>
<tag2>
ПРИМЕР 2:
--- ВЫВОД XML ---
<tag2>1</tag2>
<tag1>2</tag1>
---- XSD-файл
<tag1>
<tag2>
который один из них потерпит неудачу? если таковые имеются?
Я использую тип проверки как «ValidationType.Schema»

Спасибо за помощь.ValidationType.Schema validation

+0

возможно дубликат http://stackoverflow.com/questions/7448616/why-is-node-order-important-in-xml – Anil

ответ

0

@ user1705851, порядок узлов имеет значение, поскольку элемент может иметь одно и то же имя, но вы можете избежать этого, используя все атрибуты в xsd. Рабочий код ваших узлов приведен ниже.

Imports System.Xml.Schema 
Module Module1 
Dim errors As Boolean = False 


Sub Main() 
    Dim xsdMarkup As XElement = _ 
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'> 


<xsd:element name='Root'> 
    <xsd:complexType> 
     <xsd:all> 
      <xsd:element name='tag1' minOccurs='0' maxOccurs='1'/> 
      <xsd:element name='tag2' minOccurs='0' maxOccurs='1'/> 
     </xsd:all> 
    </xsd:complexType> 
</xsd:element> 

Dim schemas As XmlSchemaSet = New XmlSchemaSet() 
    schemas.Add("", xsdMarkup.CreateReader) 

    Dim doc1 As XDocument = _ 
     <?xml version='1.0'?> 
     <Root> 
      <tag1>1</tag1> 
      <tag2>2</tag2> 
     </Root> 

    Dim doc2 As XDocument = _ 
     <?xml version='1.0'?> 
     <Root> 
      <tag2>1</tag2> 
      <tag1>2</tag1> 
     </Root> 

    Console.WriteLine("Validating doc1") 
    errors = False 
    doc1.Validate(schemas, AddressOf XSDErrors) 
    Console.WriteLine("doc1 {0}", IIf(errors = True, "did not validate", "validated")) 

    Console.WriteLine() 
    Console.WriteLine("Validating doc2") 
    errors = False 
    doc2.Validate(schemas, AddressOf XSDErrors) 
    Console.WriteLine("doc2 {0}", IIf(errors = True, "did not validate", "validated")) 
    Console.ReadLine() 
End Sub 
Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs) 
    Console.WriteLine("{0}", e.Message) 
    errors = True 
End Sub 
End Module