Question

J'ai modifié le MSDN exemple pour refléter mon problème.

Lorsque vous utilisez un espace de noms, je ne peux pas faire valider le document comme je m'attendais et lors de la validation d'un document qui n'a pas d'espace de noms, il valide qu'il ait ou non une erreur ou non.

Dim errors As Boolean = False

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

Private Function AddNameSpace(ByVal xDoc As XDocument, ByVal ns As XNamespace) As XDocument
    For Each element As XElement In xDoc.Descendants
        element.Name = ns + element.Name.LocalName
    Next
    Return xDoc
End Function

Sub Main()
    Dim xsdMarkup As XElement = _
        <xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema' xmlns="http://somenamespace.com" targetNamespace="http://somenamespace.com">
            <xsd:element name='Root'>
                <xsd:complexType>
                    <xsd:sequence>
                        <xsd:element name='Child1' minOccurs='1' maxOccurs='1'/>
                        <xsd:element name='Child2' minOccurs='1' maxOccurs='1'/>
                    </xsd:sequence>
                </xsd:complexType>
            </xsd:element>
        </xsd:schema>
    Dim schemas As XmlSchemaSet = New XmlSchemaSet()
    schemas.Add("http://somenamespace.com", xsdMarkup.CreateReader)

    Dim doc1 As XDocument = _
        <?xml version='1.0'?>
        <Root>
            <Child1>content1</Child1>
            <Child2>content1</Child2>
        </Root>

    Dim doc2 As XDocument = _
        <?xml version='1.0'?>
        <Root>
            <Child1>content1</Child1>
            <Child3>content1</Child3>
        </Root>

    Dim ns As XNamespace = "http://somenamespace.com"
    doc1 = AddNameSpace(doc1, ns)

    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"))

End Sub

Production:

Valider doc1

L'élément 'root' dans l'espace de noms 'http://somenamespace.com' a un élément enfant non valide 'child1' dans l'espace de noms 'http://somenamespace.com'. Liste des éléments possibles attendus: «Child1».

DOC1 n'a pas validé

Valider doc2

doc2 validé

Pas de solution correcte

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top