MSXML VBA: Validation XML contre XSD: “La " de l'espace de noms fournie diffère du schéma de targetNamespace.”
Je suis en train de valider une .Fichier XML à l'encontre d'un .Fichier XSD avec MSXML 6.0 DOM mais sur l'exécution de ce code j'obtiens ce message d'erreur:
Test.xsd#/schema/targetNamespace[1]
"The '' namespace provided differs from the schema's 'http://somewhere.com/root' targetNamespace."
Lourdement des versions simplifiées de l' .XML et .Les fichiers XSD aussi produire le même message d'erreur:
FICHIER XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:noderoot xmlns:ns2="http://somewhere.com/root">
<general>
<year>2011</year>
<month>02</month>
</general>
</ns2:noderoot>
FICHIER XSD
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns="http://somewhere.com/root"
targetNamespace="http://somewhere.com/root"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
elementFormDefault="unqualified"
attributeFormDefault="unqualified">
<xs:complexType name="TYPE_nodeGeneral">
<xs:sequence>
<xs:element name="year">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="4"/>
<xs:pattern value="\d{4}"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="month">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="2"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="TYPE_noderoot">
<xs:sequence>
<xs:element name="general" type="TYPE_nodeGeneral"></xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="noderoot" type="TYPE_noderoot"></xs:element>
</xs:schema>
Afin de valider le fichier XML, je suis en utilisant ce code écrit en VBA (Excel 2010):
Sub XSD_Validation()
XML_FILE = "I:\Test.xml"
XSD_FILE = "I:\Test.xsd"
Dim xmlDoc As MSXML2.DOMDocument60
Set xmlDoc = New MSXML2.DOMDocument60
xmlDoc.async = False
xmlDoc.validateOnParse = False
xmlDoc.resolveExternals = False
xmlDoc.Load XML_FILE
' Open XSD file
Dim obXSD As MSXML2.DOMDocument60
Set objXSD = New MSXML2.DOMDocument60
objXSD.async = False
objXSD.Load XSD_FILE
' Populate schema cache
Dim objSchemaCache As XMLSchemaCache60
Set objSchemaCache = New MSXML2.XMLSchemaCache60
objSchemaCache.Add "", objXSD
' XSD XML Bind
Set xmlDoc.Schemas = objSchemaCache
'Error visualization
Dim objErr As MSXML2.IXMLDOMParseError
Set objErr = xmlDoc.Validate()
If objErr.errorCode <> 0 Then
Debug.Print "Error parser: " & objErr.errorCode & "; " & objErr.reason
Else
Debug.Print "No errors found"
End If
Set objErr = Nothing
Set objXSD = Nothing
Set objSchemaCache = Nothing
Set xmlDoc = Nothing
End Sub
Le fichier XSD peuvent être modifiés, mais le fichier XML doit rester intouchable.
J'ai essayé de résoudre ce problème pendant plus de 8 heures sans résultat positif.
Toute aide sera grandement appréciée.
OriginalL'auteur David Grant | 2012-07-29
Vous devez vous connecter pour publier un commentaire.
Essayez d'ajouter l'espace de noms URI du schéma de cache.
OriginalL'auteur Tomalak
Vous ne devriez pas avoir à changer quoi que ce soit dans votre xml/xsd, car ils sont valides. Le problème est dans votre code, je vous suggère de jeter un oeil à cet exemple qui montre ce que je pense est différent de votre code: lorsque vous ajoutez le XSD pour le cache, utilisez l'espace de noms cible http://somewhere.com/root au lieu de la chaîne vide.
OriginalL'auteur Petru Gardea