2010-11-25 16 views
1

Je travaille sur une application Android qui analyse un ou plusieurs flux XML en fonction des préférences de l'utilisateur. Est-il possible d'analyser (en utilisant SAX Parser) plus d'un flux XML à la fois en fournissant à l'analyseur un tableau d'URL de mes flux XML? Si non, quelle serait une alternative pour lister les éléments analysés de différents flux XML dans une liste? Une approche intuitive consiste à utiliser java.io.SequenceInputStream pour fusionner les deux flux d'entrée. Cependant, cela jette un NullPointerException:Comment analyser plusieurs flux XML à la fois à partir d'un tableau d'URL avec SAX Parser for Java?

try { 
    URL urlOne = new URL("http://example.com/feedone.xml"); 
    URL urlTwo = new URL("http://example.com/feedtwo.xml"); 
    InputStream streamOne = urlOne.openStream(); 
    InputStream streamTwo = urlTwo.openStream(); 
    InputStream streamBoth = new SequenceInputStream(streamOne, streamTwo); 
    InputSource sourceBoth = new InputSource(streamBoth); 
    //Parsing 
    stream = xmlHandler.getStream(); 
    } 
catch (Exception error) { 
    error.printStackTrace(); 
} 
List<Item> content = stream.getList(); 
return content; 
+0

Plus d'infos nécessaires: Où attribuez-vous l'InputSource au SAXParser? Quels types d'objets sont xmlHandler et le résultat de la méthode getStream()? Utilisez-vous réellement SAX ou API StAX? –

+1

Tomas, merci pour votre aide. J'ai fini par utiliser la solution suggérée par Don - il est beaucoup plus logique d'essayer d'ajouter des flux avant de les analyser. – ernes7a

Répondre

1

La tactique de annexant les cours d'eau avant que l'analyse n'est pas susceptible de bien fonctionner, comme le XML en annexe ne sera pas XML valide. Comme chaque entrée XML a son propre élément racine, le XML ajouté aura plusieurs racines, ce qui n'est pas autorisé en XML. En outre, il est susceptible d'avoir plusieurs en-têtes XML comme

<?xml version="1.0" encoding="UTF-8"?> 

qui est également invalide.

Bien qu'il soit possible de pré-traiter l'entrée pour contourner ces problèmes, il est probablement préférable de les analyser séparément et de faire en sorte que les résultats soient combinés ultérieurement.

Il est possible de faire un analyseur SAX ajouter les éléments analysés à une liste existante d'éléments. Si vous postez du code dans votre question montrant comment vous analysez un seul fichier, nous serons peut-être en mesure de vous aider à déterminer comment l'ajuster à vos besoins en entrées multiples.

+0

Don, merci pour la réponse. Il ne m'est jamais venu à l'esprit que faire un essai et simplement joindre plusieurs flux XML est une erreur conceptuelle. En fin de compte, j'ai résolu le problème comme vous l'avez suggéré - en analysant les flux séparément et en combinant leurs résultats. – ernes7a