2010-11-09 34 views
1

Dans mon logiciel, je reçois un fichier xml qui contient des entités HTML comme & amp; ou peu importe. Je réussis à décoder le xml mais pas les entités HTML. Les chaînes sont coupées quand ils rencontrent des entités html ... Tout le monde peut aider? J'ai fait un tel code à décoder le xml ...Android décodage html dans le fichier xml

  DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
InputStream inputStream = entity.getContent(); 
Document dom = builder.parse(inputStream); 
    inputStream.close(); 


    Element racine = dom.getDocumentElement(); 
    NodeList nodeLst=racine.getElementsByTagName("product"); 

Est-ce que quelqu'un sait comment je peux faire le même travail, le décodage du xml comme un objet dom et le décodage aussi des entités HTML?

En fait mon objet dom n'est pas correct car il contient des chaînes coupées à cause d'entités HTML ... que puis-je faire?

+0

Est-ce, par exemple, ' A & B' ou ' A & amp; B'? Et qu'avez-vous exactement besoin comme résultat final, 'A & B' ou' A & B'? Et que voulez-vous dire par "couper"? – RoToRa

Répondre

0

Vous pourriez essayer d'employer androids Html tag editor. Il faut faire ce que vous voulez, il ne reconnaît pas tous HTML, mais il ne semble travailler pour convertir des chaînes:

Html.fromHtml(inputstream) 

Voici un exemple simple:

TextView tv = (TextView) findViewById(R.id.tv); 
    String s = "<b>This is</b> my first <u>HTML String</u> &amp; it works well!"; 
    tv.setText(Html.fromHtml(s)); 

est ici la sortie :

+0

Je connais cette fonction, merci. Mais cela ne peut pas aider car mon objet dom est déjà invalide (les cordes à l'intérieur sont coupées). Il est trop tard pour utiliser cette fonction. J'ai besoin d'une autre façon d'analyser le fichier xml qui acceptera les entités HTML et ne les coupera pas. – Fabien

+0

Eventuellement, en regardant ce site [Utilisation de XPATH et HTML Cleaner pour analyser HTML/XML] (http://thinkandroid.wordpress.com/2010/01/05/using-xpath-and-html-cleaner-to-parse- html-xml) pourrait être plus d'aide? – Scoobler

+0

Voir le poste très similaire, l'utilisateur a utilisé xmlpullparser - [Parsing html nombres en XML] (http://stackoverflow.com/questions/4132092/parsing-html-numbers-like-189-in-dom-parser-android/4132536 # 4132536) Peut-être que cela peut aider? – Scoobler

1

J'ai deux approches pour suggérer:

  1. validation de Deactivate: factory.setValidating(false);

  2. Ajouter une balise DTD XHTML à votre flux XML, immédiatement après la balise <?xml ...>. ?

    < xml version = "1.0" > < DOCTYPE html PUBLIC "- // W3C // DTD XHTML 1.0 Transitional // EN" « http://www.w3.org/TR/xhtml1/DTD /xhtml1-transitional.dtd » >

+0

Merci pour votre réponse. Je ne peux pas le tester maintenant parce que nous avons utilisé une autre approche et changé la façon dont notre serveur nous envoyait des données. J'espère que cette réponse pourrait aider d'autres personnes. – Fabien

+0

Comment désactiver la validation quand je fais getResources(). GetXml (R.xml.laws)? – Zammbi

+1

@Zammbi: Je pense que vous devriez pouvoir désactiver la validation en utilisant l'interface ['XmlPullParser'] (http://developer.android.com/reference/org/xmlpull/v1/XmlPullParser.html) et la' setFeature' méthode. Je suggère de poser une nouvelle question si vous avez besoin de plus d'informations. –

1

Je pense qu'il iss parce qu'il détecte "'" comme une finale apostrophe de chaîne. J'ai fondé une solution. Pouvez-vous développer ce qui est exactement dans le fichier XML?

String stringDatosEntrada = new Scanner(urlConnection.getInputStream()).useDelimiter("\\A").next().replaceAll("&amp;#39;","\'").replaceAll("&#39;","\'"); 

InputStream is = new ByteArrayInputStream(stringDatosEntrada.getBytes()); 
Document dom = builder.parse(inputStream)