2016-02-07 1 views
0

J'essaye d'analyser une page Web en XML et d'imprimer des données dans mon logcat, mais ma sortie est vide. Ceci est ma structure XML:XML Analyse dans le site Web

<?xml version="1.0"?> 
<FLIGHTS> 
    <FLIGHT airport="b: 3 " 
     logo="IG" 
     code="IG" 
     numero="1234" 
     carrier="AirBerlin" 
     city="NEW YORK" 
     terminal="Terminal A" 
     sched="08:40" 
     expect="09:09" 
     tipo_volo="L" stato="J" 
    </FLIGHT> 
    <FLIGHT airport="c: 3 " 
    .... 
    .....more... 
    </FLIGHT> 
</FLIGHTS> 

et voici mon code Android à l'intérieur AsyncTask:

 @Override 
    protected String doInBackground(String... params) { 

     try { 


      URL url = new URL("http://myurl"); 
      URLConnection conn = url.openConnection(); 

      DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
      DocumentBuilder builder = factory.newDocumentBuilder(); 
      Document doc = builder.parse(conn.getInputStream()); 

      NodeList nodes = doc.getElementsByTagName("FLIGHT"); 
      for (int i = 0; i < nodes.getLength(); i++) { 
       Element element = (Element) nodes.item(i); 
       // NodeList title = element.getElementsByTagName("airport"); 
       // Element line = (Element) title.item(0); 
      //  a.add(line.getTextContent()); 

       Log.d("LOG...", "" + element.getTextContent()); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

à l'intérieur du AndroidManifest, j'ai la permission d'Internet!

Merci!

Répondre

0

Votre exemple de code fonctionne. Java est sensible à la casse. Êtes-vous sûr que votre nom de tag XML est correct?

Voici un exemple de travail en utilisant un exemple XML de W3Schools:

try { 

     URL url = new URL("http://www.w3schools.com/xml/note.xml"); 
     URLConnection conn = url.openConnection(); 

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(conn.getInputStream()); 

     NodeList nodes = doc.getElementsByTagName("note"); 
     for (int i = 0; i < nodes.getLength(); i++) { 
      Element element = (Element) nodes.item(i); 
      // NodeList title = element.getElementsByTagName("airport"); 
      // Element line = (Element) title.item(0); 
      // a.add(line.getTextContent()); 

      System.out.println(element.getTextContent()); 
     } 
     } catch (Exception e) { 
     e.printStackTrace(); 
     } 

Et maintenant, en utilisant votre exemple XML et Joop Eggen's réponse:

try { 

    URL url = new URL("http://myurl"); 
    URLConnection conn = url.openConnection(); 

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
    DocumentBuilder builder = factory.newDocumentBuilder(); 
    Document doc = builder.parse(conn.getInputStream()); 

    NodeList nodes = doc.getElementsByTagName("FLIGHT"); 
    for (int i = 0; i < nodes.getLength(); i++) { 
     Element element = (Element) nodes.item(i); 
     String airport = element.getAttribute("airport"); 

     System.out.println("element " + i + ": airport=" + airport); 
    } 
    } catch (Exception e) { 
    e.printStackTrace(); 
    } 

Exemple utilisant un simple fichier:

test.xml:

<?xml version="1.0"?> 
<FLIGHTS> 
    <FLIGHT airport="b: 3 " logo="IG" code="IG" numero="1234" 
     carrier="AirBerlin" city="NEW YORK" terminal="Terminal A" sched="08:40" 
     expect="09:09" tipo_volo="L" stato="J"> 
    </FLIGHT> 
</FLIGHTS> 

Example.java:

import java.io.File; 
import java.io.FileInputStream; 

import javax.xml.parsers.DocumentBuilder; 
import javax.xml.parsers.DocumentBuilderFactory; 

import org.w3c.dom.Document; 
import org.w3c.dom.Element; 
import org.w3c.dom.NodeList; 

public class Example { 

    public static void main(String[] args) { 
    File f = new File("test.xml"); 
    try { 

     DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
     DocumentBuilder builder = factory.newDocumentBuilder(); 
     Document doc = builder.parse(new FileInputStream(f)); 

     NodeList nodes = doc.getElementsByTagName("FLIGHT"); 
     for (int i = 0; i < nodes.getLength(); i++) { 
     Element element = (Element) nodes.item(i); 
     String airport = element.getAttribute("airport"); 

     System.out.println("element " + i + ": airport='" + airport + "'"); 
     } 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    } 
} 
+0

Maintenant, je pense que je vois le problème: Essayez doc.getElementsByName ("VOLS") et non seulement "VOL". Cela va lister tous les noeuds FLIGHT. –

+0

Cet exemple de code ne fonctionne que si le code XML était correct. Regardez à nouveau le XML dans la question –

+0

Ok, si le XML ressemble vraiment à l'exemple, il ne peut pas fonctionner, en effet. Mais je pense que les données proviennent d'une API publique?

1

Si le XML était correcte, les attributs sont XXX="..." a différemment:

Element element = (Element) nodes.item(i); 
String airport = element.getAttribute("airport"); 
if (airport != null) { ...