2011-09-03 6 views
1

J'essaie d'analyser d'un simple fragment de HTML avec NekoHTML:fragment NekoHTML SAX analyse syntaxique

<h1>This is a basic test</h1> 

Pour ce faire, je me suis fixé un specific Neko feature ne pas avoir de HTML, HEAD ou balise BODY appelant startElement (..) rappeler. Malheureusement, cela ne fonctionne pas pour moi .. J'ai certainement raté quelque chose mais je ne sais pas ce que ce serait.

Voici un code très simple à reproduire mon problème:

public static class MyContentHandler implements ContentHandler { 

    public void characters(char[] ch, int start, int length) throws SAXException { 
     String text = String.valueOf(ch, start, length); 
     System.out.println(text); 
    } 

    public void startElement(String nameSpaceURI, String localName, String rawName, Attributes attributes) throws SAXException { 
     System.out.println(rawName); 
    } 

    public void endElement(String nameSpaceURI, String localName, String rawName) throws SAXException { 
     System.out.println("end " + localName); 
    } 
} 

Et le principal() pour lancer un test:

public static void main(String[] args) throws SAXException, IOException { 
     SAXParser saxReader = new SAXParser(); 
     // set the feature like explained in documentation : http://nekohtml.sourceforge.net/faq.html#fragments 
     saxReader.setFeature("http://cyberneko.org/html/features/balance-tags/document-fragment", true); 
     saxReader.setContentHandler(new MyContentHandler()); 
     saxReader.parse(new InputSource(new StringInputStream("<h1>This is a basic test</h1>"))); 
    } 

La sortie correspondante:

HTML 
HEAD 
end HEAD 
BODY 
H1 
This is a basic test 
end H1 
end BODY 
end HTML 

alors que je m'attendais à

H1 
This is a basic test 
end H1 

Une idée?

+0

Si vous définissez la fonctionnalité sur false, obtenez-vous exactement la même sortie? –

+0

Oui, exactement la même chose :-( – Gael

Répondre

0

J'ai enfin compris!

En fait, j'ai analysé ma chaîne HTML dans une application GWT, où j'ai ajouté la dépendance gwt-dev.jar. Ce fichier contient beaucoup de librairies externes, comme xercesImpl. Mais la version des classes xerces incorporées ne correspond pas à celle requise par NeokHTML. En tant que résultat (étrange), il semble que l'analyseur NeokHTML SAX n'utilise aucune fonction personnalisée lors de l'utilisation de la version xerces intégrée de gwt-dev.

J'ai donc dû retravailler du code pour supprimer la dépendance gwt-dev, qui d'ailleurs n'est pas recommandée pour être ajoutée à un projet GWT standard.

+0

Pour être plus précis, gwt-dev.jar inclut NekoHTML dans la version 1.9.13, qui est buggée avec l'analyse de fragmentation L'analyse de fragmentation fonctionne avec 1.9.11 et 1.9.14, pas de chance: - ( – Gael

Questions connexes