Question

Je suis en train d'écrire une petite application de grattage écran qui consomme une XHTML - il va sans dire que le XHTML est invalide: esperluette ne sont pas échappés comme &

.

J'utilise le XmlPullParser Android et vomit l'erreur suivante sur la valeur codée de manière incorrecte:

org.xmlpull.v1.XmlPullParserException: unterminated entity ref 
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'>
@55:134 in java.io.InputStreamReader@43b1ef70) 

Comment puis-je contourner cela? J'ai pensé les solutions suivantes:

  1. Emballage du InputStream dans une autre qui remplace l'esperluette avec refs entité
  2. Configuration du Parser il accepte comme par magie le balisage incorrect

Quels sont ceux qui sont susceptibles d'avoir plus de succès?

Était-ce utile?

La solution

Je voudrais aller avec votre première option, le remplacement des esperluette semble plus d'une solution en forme que l'autre. La deuxième option semble plus d'un bidouille pour le faire fonctionner en acceptant le balisage incorrect.

Autres conseils

Je suis coincé sur ce pendant environ une heure avant de déterminer que, dans mon cas, il était le « et » qui ne pourraient être résolus par le parseur XML PULL, donc je l'ai trouvé la solution. Donc Voici un extrait de code qui fixe totalement.

void ParsingActivity(String r) {
    try {
        parserCreator = XmlPullParserFactory.newInstance();
        parser = parserCreator.newPullParser();
        // Here we give our file object in the form of a stream to the
        // parser.
        parser.setInput(new StringReader(r.replaceAll("&", "&amp;")));
        // as a SAX parser this will raise events/callback as and when it
        // comes to a element.
        int parserEvent = parser.getEventType();
        // we go thru a loop of all elements in the xml till we have
        // reached END of document.
        while (parserEvent != XmlPullParser.END_DOCUMENT) {
            switch (parserEvent) {
            // if u have reached start of a tag
            case XmlPullParser.START_TAG:
                // get the name of the tag
                String tag = parser.getName();

à peu près ce que je fais, je vais juste remplacer le & avec &amp; depuis que je traitais l'analyse d'une URL. Espérons que cela aide.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top