XDocument.Valider les problèmes d'espace de noms
-
07-11-2019 - |
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