2008-08-28 7 views
1

La plupart des analyseurs XML abandonnent après la première erreur dans un document. En fait, l'IIRC fait partie de la spécification «officielle» pour les parseurs.Rapport de validation de l'analyseur XML

Je cherche quelque chose qui enfreindra cette règle. Il devrait prendre un schéma donné (en supposant un schéma valide) et une entrée XML et tenter de continuer après la première erreur et soit augmenter un événement pour chaque erreur ou retourner une liste lorsque vous avez terminé, donc je peux l'utiliser pour générer une sorte de un rapport des erreurs dans le document. Cette exigence vient d'en haut, alors essayons de garder le puriste "mais il n'aurait pas de sens de continuer" commentaires au minimum.

Je cherche quelque chose qui permettra d'évaluer à la fois si le document est bien formé et s'il est conforme ou non au schéma. Idéalement, il faudrait les évaluer comme différentes classes d'erreur. Je préférerais une solution .Net mais je pourrais aussi utiliser un fichier .exe autonome. Si vous en connaissez une qui utilise une plate-forme différente, allez-y et postez-la parce que quelqu'un d'autre pourrait la trouver utile.

Mise à jour:

Je pense que la plupart des documents où j'utilise ce sera la plupart du temps bien formés. Peut-être un & inclus en tant que données au lieu de & ampli ici et là, ou un tag mis-placé occasionnellement. Je ne m'attends pas à ce que l'analyseur puisse se remettre de n'importe quoi, juste pour faire un effort pour continuer. Si un document est trop détraqué, il devrait cracher autant qu'il le peut, suivi d'une erreur fatale, incapable de continuer. Sinon, la partie validation du schéma est assez facile.

Répondre

1

In fact, IIRC, that's actually part of the 'official' spec for parsers.

officiel n'a pas besoin d'être cité :)

fatal error

[Definition:] An error which a conforming XML processor must detect and report to the application. After encountering a fatal error, the processor may continue processing the data to search for further errors and may report such errors to the application. In order to support correction of errors, the processor may make unprocessed data from the document (with intermingled character data and markup) available to the application. Once a fatal error is detected, however, the processor must not continue normal processing (i.e., it must not continue to pass character data and information about the document's logical structure to the application in the normal way).

Vous pouvez utiliser xmllint avec l'option de récupérer.

1

On dirait que vous voulez TagSoup. Ce n'est peut-être pas exactement ce que vous voulez, mais en ce qui concerne les analyseurs de mauvais documents, c'est l'étalon-or.

1

Xerces a une feature vous pouvez définir pour essayer et continuer après une erreur fatale:

http://apache.org/xml/features/continue-after-fatal-error
True: Attempt to continue parsing after a fatal error.
False: Stops parse on first fatal error.
Default: false
Note: The behavior of the parser when this feature is set to true is undetermined! Therefore use this feature with extreme caution because the parser may get stuck in an infinite loop or worse.