2009-01-24 8 views
0

Je rencontre des problèmes lors de la validation d'un code XML par rapport à un schéma, en utilisant .net et C#. J'utilise XmlReaderSettings avec ValidationEventHandler. Cependant, cela semble arrêter de rattraper les erreurs après avoir rencontré la première erreur à un niveau particulier dans le fichier XML, au lieu de vérifier la balise suivante au même niveau, donc, fondamentalement, il ne vérifie pas chaque balise dans le fichier XML saute plutôt un niveau lorsqu'il a trouvé une erreur.Validation d'une balise XML par balise

J'espérais obtenir des conseils de quelqu'un qui a réussi ce type de validation.

Merci beaucoup

+0

Salut, merci pour les réponses! 1. Le code XML est valide mais pas valide selon le schéma. 2. Ne pas avoir le code sur cette machine, car il est en cours d'exécution, mais mettra à jour dès que possible avec un code spécifique! –

+0

Comment gérez-vous le ValidationEvent? Pourrions-nous voir du code? – Malfist

Répondre

0

XmlReader est décrit comme un lecteur

qui fournit un accès rapide, non mis en cache, l'accès avant uniquement aux données XML.

de the API documentation et de vos descriptions du comportement de votre application, il ressemble à une exception est levée et qu'il est défini une certaine forme de méthode de rappel de validation qui fait quelque chose non fatale (comme l'enregistrement d'une mise en garde) puis renvoie le contrôle au validateur à un niveau au-dessus de l'élément incriminé.

Soit dit en passant: les éléments XML sont appelés « éléments », et non pas « tags »

1

Cela semble que vous avez un xsd:sequence défini dans votre schéma et l'erreur se produit lorsque l'ordre des éléments dans votre document ne correspond pas à l'ordre des éléments définis dans le schéma.

Compte tenu de ce schéma:

<?xml version="1.0" encoding="utf-8"?> 
<xsd:schema 
    attributeFormDefault="unqualified" 
    elementFormDefault="qualified" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <xsd:element name="Dog"> 
     <xsd:complexType> 
      <xsd:sequence> 
       <xsd:element name="Age" type="xsd:int"/> 
       <xsd:element name="Name" type="xsd:string"/> 
      </xsd:sequence> 
     </xsd:complexType> 
    </xsd:element> 
</xsd:schema> 

et ce XML:

<Dog> 
    <Name>Rex</Name> 
    <Age>three</Age> 
</Dog> 

Vous imaginez que la validation créerait deux erreurs:

1. The element 'Dog' has invalid child element 'Name'. 
2. The 'Age' element is invalid - The value 'three' is invalid according to its datatype 

Mais vous ne voyez la première erreur . Cela est dû au fait que la première erreur de l'élément enfant invalide empêche le XmlReader d'analyser le reste du document car il ne sait plus à quoi s'attendre ensuite.

Questions connexes