2009-10-16 5 views
1

Je veux vérifier un xml signé numériquement contre sa définition de schéma alors que ce schéma contient en fait cette balisene peut pas valider contre plusieurs schémas XSD en C#

<xs:import namespace="http://www.w3.org/2000/09/xmldsig#" schemaLocation="xmldsig-core-schema.xsd" id="schema"/> 

Puis j'ai essayé de charger des schémas:

XmlReaderSettings settings = new XmlReaderSettings(); 
settings.Schemas.Add(null, "a.xsd"); 
settings.Schemas.Compile(); 

J'obtiendrai l'erreur suivante L'élément 'http://www.w3.org/2000/09/xmldsig#:Signature' n'est pas déclaré.

+0

Votre XML valide dans un outil comme XMLSpy? Si je me souviens bien, vous devriez pouvoir valider par rapport aux schémas importés/inclus en utilisant le XmlReader. – thijs

Répondre

2

Vous devez charger également dans le schéma importé avec un autre

settings.Schemas.Add ([importednamespace], [pathtoimportedXSD]);

0

êtes-vous sûr de hachage est requise à la fin ?: http://www.w3.org/2000/09/xmldsig#

+0

Il fait partie de l'espace de noms URI, voir http://www.w3.org/TR/2002/REC-xmldsig- core-20020212/xmldsig-core-schema.xsd – Richard

+0

ok, merci, je ne sais pas à ce sujet – dusoft

0

De l'erreur, il semblerait le schéma de signature XML n'est pas chargé, en dépit de l'importation. L'ajout explicite du schéma de signature XML à l'ensemble de schémas doit être confirmé par

.

La cause la plus probable est le XmlReslver de l'ensemble de schémas ne trouve pas le fichier que vous spécifiez, cela peut être un dossier en cours/problème de chemin relatif.

En utilisant Process Monitor pour voir où vous pouvez essayer de charger le fichier XSD peut également aider.

1

Le schéma xmldsig-core-schema.xsd ne charge pas pour des raisons de sécurité car il fait référence à une DTD pour valider le répertoire de téléchargement et l'ajouter comme un autre schéma.

<!DOCTYPE schema PUBLIC "-//W3C//DTD XMLSchema 200102//EN" "http://www.w3.org/2001/XMLSchema.dtd" 

cela fonctionne La solution est C#

XElement xsdMarkup = XElement.Load("C:\\Proyectos\\WindowService\\Sbif\\Schema\\Schema\\IndicadoresFinancieros-v1.0.xsd"); 

XElement xsdMarkup2 = XElement.Load("http://www.w3.org/TR/2002/REC-xmldsig-core-20020212/xmldsig-core-schema.xsd"); 

XmlSchemaSet schemas = new XmlSchemaSet(); 

schemas.Add(null, xsdMarkup.CreateReader()); 
schemas.Add(null, xsdMarkup2.CreateReader()); 

schemas.Compile(); 
Questions connexes