2010-08-03 4 views
3

J'utilise un analyseur SAX (sur android) pour analyser un fichier XML à partir d'un WebService. Sur certains éléments, le CDATA est tronqué et non complet, par ex. le fichier XML contient des données commeCDATA XML est tronqué lors de l'analyse

<name><![CDATA[Gölsder und Ginck GmbH]]></name> 

et après l'analyse du fichier xml avec

public void characters(char[] ch, int start, int length) 
    throws SAXException { 
    super.characters(ch, start, length); 
    String text = new String(ch, start, length); 

le texte ne contient "Gölsder und Gin" (les 15 premiers caractères). J'ai débogué avec eclipse et je vois que toute la chaîne n'est pas contenue dans l'argument "char [] ch" de la méthode. donc l'analyse elle-même semble avoir une erreur

+0

de felix Pour votre information, VTD-XML pas ce problème –

Répondre

3

J'ai aussi eu ce problème. Le fait est que la méthode characters() peut être appelée plusieurs fois sur le même élément. Dans votre cas, si vous deviez écrire ceci:

public void characters(char[] ch, int start, int length) 
    throws SAXException { 
    super.characters(ch, start, length); 
    String text = new String(ch, start, length); 
    Log.d("XMLTEST", text); 
} 

Vous obtiendriez probablement deux messages du journal, un Gölsder und Gin et un ck GmbH. En conclusion, vous devez avoir des variables membres concaténées lors de la réception de nouveaux caractères.

+0

j'eu le même problème et a fini par concaténer est bizarre mais comme il ne se sépare parfois la chaîne . – Rebzie

0

Ceci est mon travail autour après avoir lu le post

private String text; 

@Override 
public void endElement(java.lang.String uri, 
         java.lang.String localName, 
         java.lang.String qName) 
     throws SAXException { 
     text = null; 
} 

@Override 
public void characters(char[] ch, int start, int length) 
     throws SAXException { 
    super.characters(ch, start, length); 
    if(text != null){ 
     text += String.copyValueOf(ch, start, length); 
    } else { 
     text = String.copyValueOf(ch, start, length); 
    } 
}