Проверка схемы .net - PullRequest
       29

Проверка схемы .net

0 голосов
/ 21 января 2011

У меня возникла проблема с проверкой XML-файла по схеме, сгенерированной svcutil. Для целей этого вопроса, пожалуйста, смотрите ниже фрагмент кода, который содержит только упрощенную схему XSD и документ XML, который я пытаюсь проверить:

Imports System.Xml.Schema

Module Main

    Dim errors As Boolean = False

    Sub Main()

        Try

            Dim xsdMarkup As XElement = _
              <xs:schema xmlns:xs='http://www.w3.org/2001/XMLSchema' xmlns:tns="http://zen/myservices" targetNamespace="http://zen/myservices">

                  <xs:element name="Car" type="tns:CarType"/>

                  <xs:complexType name="CarType">
                      <xs:sequence>
                          <xs:element name="Make" minOccurs="1" maxOccurs="1"/>
                          <xs:element name="Model" minOccurs="1" maxOccurs="1"/>
                      </xs:sequence>
                  </xs:complexType>

              </xs:schema>
            Dim schemas As XmlSchemaSet = New XmlSchemaSet()
            schemas.Add("http://zen/myservices", xsdMarkup.CreateReader)

            Dim doc1 As XDocument = _
             <?xml version='1.0'?>
             <Car>
                 <Makee>content1</Makee>
                 <Model>content1</Model>
             </Car>


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


        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try

        Console.WriteLine("Hit <ENTER> to exit...")
        Console.ReadKey()

    End Sub

    Private Sub XSDErrors(ByVal o As Object, ByVal e As ValidationEventArgs)
        Console.WriteLine("{0}", e.Message)
        errors = True
    End Sub

End Module

Проверка в этом конкретном случае должна завершиться неудачей (элемент «Make» был написан с ошибкой). Довольно интересно, хотя это проходит.

Есть идеи, что мне не хватает в этом коде?

Ваша помощь приветствуется.

Zen

1 Ответ

0 голосов
/ 21 января 2011

Все готово.Я решил проблему сам.Я случайно пропустил определение пространств имен в проверяемом XML:

<?xml version='1.0'?>          
<Car>              
    <Makee>content1</Makee>              
    <Model>content1</Model>          
</Car> 

должно было быть:

<?xml version='1.0'?>
<tns:Car xmlns:tns="http://zen/myservices">
    <Makee>content1</Makee>
    <Model>content1</Model>
</tns:Car>

Теперь проверка не проходит, как ожидалось.

...