2009-10-26 8 views
1

J'analyse le xml en utilisant JAXB. Je veux analyser XML avec succès également lorsque XML n'est pas valide qui ont une étiquette supplémentaire. Ignorez simplement les balises qui n'existent pas dans XSD. C'est possible?Analyse de xml invalide

+0

Pouvez-vous préciser que vous obtenez erreur lorsque vous tentez de le faire? Et quelle implémentation de JAXB vous utilisez? Tout peut-être un extrait de code montrant comment instancier le unmarshaller et analyser le XML? – Jherico

+0

Mon code est ci-dessous. Jaxb parse avec succès jusqu'à unknown-tag, à partir de ce point tous les tags connus est invalide. Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.setValidating (false); ValidationEventHandler validationHandler = new IwisValidationEventHandler(); unmarshaller.setEventHandler (validationHandler); public class IwisValidationEventHandler implémente ValidationEventHandler { private static Logger logger = Logger.getLogger (IwisValidationEventHandler.class); Public boolean handleEvent (ValidationEvent ve) { return true; } } –

Répondre

0

Je suppose que vous voulez dire que vous parlez de XML bien formé, mais XML qui contient des éléments qui ne sont pas définis dans le schéma?

Si oui, alors JAXB est bien avec ça. Tous les éléments dans le XML d'entrée que JAXB ne reconnaît pas seront simplement ignorés.

+0

Qu'en est-il des éléments manquants? Je veux dire que j'ai un tas de documents xml sans xsd, je génère un schéma à partir de xml (comme il se doit), mais il arrive parfois qu'il manque un élément dans l'un des documents xml. Pourriez-vous s'il vous plaît me montrer quelque part comment y faire face? Est-il question de modifier le schéma et de définir l'élément qui n'est pas obligatoire? Et les objets représentant cet élément seraient vides? Je décide d'utiliser jaxb ou de construire le DOM manuellement pour chaque document XML, ce qui n'est pas bon. Mais c'est une année que j'ai utilisé jaxb la dernière fois. Merci d'avance – lisak

0

Mon code est ci-dessous. JAXB parse avec succès jusqu'à étiquette inconnue, après la première étiquette inconnue, pour toutes les balises d'avertissement définis cette balise est balise pas connue (impression de message « Élément inattendu {} ... »)

`unmarshaller unmarshaller = context.createUnmarshaller() unmarshaller.setValidating (false); ValidationEventHandler validationHandler = new IwisValidationEventHandler(); unmarshaller.setEventHandler (validationHandler);

public class IwisValidationEventHandler implémente ValidationEventHandler { private static Logger logger = Logger.getLogger (IwisValidationEventHandler.class); public boolean handleEvent (ValidationEvent ve) { System.out.println (ve.getMessage); renvoyer true; }} `

0

Vous pouvez ajouter xsd: tout élément

<xsd:complexType name="Type">   
    <xsd:sequence> 
    <xsd:element name="root" type="Root"/> 
     <xsd:any maxOccurs="unbounded" processContents="lax"/> 
    </xsd:sequence> </xsd:complexType> 
.....