2010-09-22 5 views
1

J'analyse un flux de données météo et il fonctionne avec certains endroits, mais des erreurs avec ce message sur certains endroits:erreur Exception Parse

09-22 10: 40: 33.364: WARN/System.err (3347): org.apache.harmony.xml.ExpatParser $ ParseException: À la ligne 465, colonne 29: pas bien formé (jeton invalide)

Toutes les idées ce qui pourrait se produire?

Voici un extrait du xml:

   <hour time="11 AM"> 
        <url>http://www.....</url> 
        <obsdate>9/22/2010</obsdate> 
        <txtshort>Parcialmente soleado</txtshort> 
        <weathericon>03</weathericon> 
        <temperature>26</temperature> 
        <feelslike>29</feelslike> 
       </hour> 

       <hour time="12 PM"> 
        <url>http://www.....</url> 
        <obsdate>9/22/2010</obsdate> 
        <txtshort>Parcialmente soleado</txtshort> 
        <weathericon>03</weathericon> 
        <temperature>26</temperature> 
        <feelslike>29</feelslike> 
       </hour> 

ligne 465 est la balise « heure » avec la valeur d'attribut de 24:00. J'ai noté le code d'analyse et il lit le xml jusqu'à ce qu'il atteigne cette ligne.

+1

Que diriez-vous afficher votre code d'analyse réelle et un extrait de XML brut qui est défaillant? – ctacke

+0

Je ne crois pas que ce soit mon code car il fonctionne sur certains flux et pas d'autres provenant de la même source à des endroits différents. – taraloca

+0

@taraloca: Est-ce un service météorologique public? Pouvons-nous jeter un coup d'oeil au fichier original que vous avez? – Bobby

Répondre

1

Cela s'est avéré être un caractère non reconnu dans l'analyse d'un document XML. Ce que je l'ai fait pour résoudre ce problème était d'inclure le type de codage comme celui-ci: (choisir l'encodage qui correspond à votre document XML)

InputSource inputSource = new InputSource(is); 
//inputSource.setEncoding("iso-8859-1"); 
inputSource.setEncoding("utf-8"); 
1

L'erreur indique que cela se produit dans la colonne 29, et la ligne que vous avez indiquée est la ligne contenant l'erreur est seulement 18 caractères. Selon toute vraisemblance, cela signifie une des deux choses: soit cette ligne contient des caractères non imprimables que nous ne pouvons pas voir, dont l'un est l'un des rares petits caractères qui ne sont pas autorisés en XML, ou il y a un Une erreur est survenue quelque part et l'erreur se produit dans la ligne suivante - probablement dans l'URL que vous avez expurgée.

+0

Ce n'est pas correct, avant mon édition (pour la lisibilité) la ligne était de 36 caractères, le 29ème caractère est le 1. – Bobby

+0

Le 28ème caractère '&'? – Quentin

0

Avant de tenter de lire un fichier xml, il est toujours conseillé de vérifier la bonne forme du document xml que vous essayez de lire pour . Dans ce cas, essayez de placer une condition de bonne forme autour du flux XML que vous obtenez du flux de données météo avant de l'analyser. En utilisant C# .Net cela peut se faire comme suit: -

XmlDocument doc = new XmlDocument(); 
doc.loadxml(rawXMLcontent); 

Si cela échoue, il va au bloc d'exception. Vous pouvez gérer le flux dans le bloc d'exception en conséquence. Cela garantit que vous n'obtiendrez jamais d'exceptions d'analyse. J'espère que ça aide.

+0

Je pense que si vous regardez l'erreur de près, vous verrez qu'elle est lancée par l'analyseur XML - en bref, OP effectue déjà exactement la vérification de la forme que vous proposez. –

+0

@Robert Oui, je vois que l'erreur est liée à la valeur de l'attribut qui contourne facilement la condition de bonne forme. –

+0

Contournement facile? Le message d'erreur * indique * que le document n'est pas bien formé. –