IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Android Discussion :

Erreur récupération contenu de fichier XML


Sujet :

Android

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Par défaut Erreur récupération contenu de fichier XML
    Bonjour, j'ai une méthode qui exécute une URL et qui en récupère le contenu généré au format XML (fichier PHP générant ce fichier).

    Lorsqu'il y a le symbole "<" dans le contenu récupéré, l'application me sort une erreur "ParseException".

    Voilà à quoi ressemble le code source XML récupéré lorsqu'il y a ce fameux symbole :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version='1.0' encoding='UTF-8'?><rules>
    	<rule>
    		<id>1</id>
    		<name>rtg</name>
    		<description>fut</description>
    	</rule>
    		<rule>
    		<id>3</id>
    		<name>aé!€</name>
    		<description>aé!€</description>
    	</rule>
    		<rule>
    		<id>16</id>
    		<name><01234567890123456789012345678901234567890123456789012345678901234</name>
    		<description>ztué,\') nkg¥~\\[§>{:}=|¹~#{[|`\^@]o:P)(%54
    
    ^¤¤</description>
    	</rule>
    	</rules>
    Le caractère qui fait tout planter est le "<" (celui en rouge) du champs name de la rule 16.
    Je précise qu'il s'agit de valeurs de test.

    Voilà également la façon dont je récupère ce contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
     
    public ArrayList<freeman.objects.Rules> parseRules(String url) throws MalformedURLException, IOException, NullPointerException, XmlPullParserException{
     
    	ArrayList<freeman.objects.Rules> listeRules = null;
    	XmlPullParser parser = Xml.newPullParser();
     
    	try {
    		// auto-detect the encoding from the stream
    		parser.setInput(this.getInputStream(url), null);
    		int eventType = parser.getEventType();
    		freeman.objects.Rules currentRule = null;
    		boolean done = false;
     
    		while (eventType != XmlPullParser.END_DOCUMENT && !done){
    			String name = null;
     
    			switch (eventType){
     
    				// Dans le cas où l'on commence le document XML
    				case XmlPullParser.START_DOCUMENT:
    					listeRules = new ArrayList<freeman.objects.Rules>();
    				break;
     
    				// Dans le cas où l'on commence une balise
    				case XmlPullParser.START_TAG:
    					name = parser.getName();
     
    					if (name.equalsIgnoreCase(RULE)){
    						currentRule = new freeman.objects.Rules();
    					}else if(currentRule != null){
     
    						if(name.equalsIgnoreCase(ID)){
    					    	currentRule.setId(Integer.parseInt(parser.nextText()));
    					    }else if (name.equalsIgnoreCase(NAME)){
    					    	//currentRule.setName(String.valueOf(Html.fromHtml(parser.nextText())));
    					    	currentRule.setName(parser.nextText());
    					    }else if(name.equalsIgnoreCase(DESCRIPTION)){
    					    	//currentRule.setDescription(String.valueOf(Html.fromHtml(parser.nextText())));
    					    	currentRule.setDescription(parser.nextText());
    					    } 
    					}
    				break;
     
    				// Dans le cas où l'on termine une balise
    				case XmlPullParser.END_TAG:
    					name = parser.getName();
    					if (name.equalsIgnoreCase(RULE) && currentRule != null){
    						listeRules.add(currentRule);
    					}else if (name.equalsIgnoreCase(RULES)){
    						done = true;
    					}
    				break;
    			}
     
    			eventType = parser.next();
    		}
    	} catch (MalformedURLException e) {
    		throw e;
    	} catch (IOException e) {
    		throw e;
    	} catch (NullPointerException e) {
    		throw e;
    	} catch (XmlPullParserException e) {
    		throw e;
    	}
     
    	return listeRules;
    }
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    private InputStream getInputStream(String strUrl) throws MalformedURLException, IOException, NullPointerException {
     
    	InputStream res=null; 
    	try {
    		URL url = new URL(strUrl);
    		res = url.openConnection().getInputStream();
    	} catch (MalformedURLException e) {
    		throw e;
    	} catch (IOException e) {
    		throw e;
    	}
     
    	if (res == null){
    		res = new ByteArrayInputStream("<rules></rules>".getBytes());
    	}
    	return res;
    }
    En me renseignant sur internet, j'ai vu un peu de tout, c'est à dire que je peux utiliser la méthode HTML.fromHTML() mais ça ne change rien.
    J'ai également essayé en formatant tout les caractères spéciaux avec leur code HTML mais sans succès, du coup, je suis perdu..
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

  2. #2
    Membre expérimenté Avatar de Seb19
    Homme Profil pro
    Concepteur SOA
    Inscrit en
    Septembre 2005
    Messages
    217
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Deux Sèvres (Poitou Charente)

    Informations professionnelles :
    Activité : Concepteur SOA

    Informations forums :
    Inscription : Septembre 2005
    Messages : 217
    Par défaut
    Bonjour,

    C'est normal que ça plante car les caractères < et & ne sont pas authorisés dans un flux XML.
    "<" génère une erreur parce que le parser l'interprète comme le début d'un nouvel élément.

    "&" génère une erreur parce que le parser l'interprète comme le début d'une entité de caractère.

    Pour t'en sortir regarde du côté de la balise CDATA dans un flux XML.

  3. #3
    Rédacteur

    Homme Profil pro
    Technical Lead Salesforce
    Inscrit en
    Février 2009
    Messages
    563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technical Lead Salesforce

    Informations forums :
    Inscription : Février 2009
    Messages : 563
    Par défaut
    Effectivement, ca va nettement mieux, ca fonctionne et c'est résolu, merci.
    - Mes articles
    - Consultant technique Salesforce
    - Salesforce Certified Administrator
    - Salesforce Certified Platform App Builder
    - Salesforce Certified Developper I
    - Salesforce Certified Sales Cloud
    - Salesforce Certified Service Cloud

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur pendant création du fichier xml
    Par borgfabr dans le forum SQL
    Réponses: 1
    Dernier message: 17/11/2007, 09h08
  2. Récupération d'un fichier xml
    Par flo_k dans le forum Flash
    Réponses: 6
    Dernier message: 23/05/2007, 13h33
  3. Récupération d'un fichier XML sur le web
    Par ZeVlad dans le forum Bibliothèques
    Réponses: 1
    Dernier message: 30/01/2007, 02h50
  4. [DOM] Erreur d'ouverture de fichier XML
    Par Arnard dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 03/05/2006, 10h38
  5. Importer le contenu un fichier xml dans un autre fichier xml
    Par gedeon555 dans le forum XML/XSL et SOAP
    Réponses: 5
    Dernier message: 27/07/2005, 11h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo