Heim  >  Artikel  >  类库下载  >  Java analysiert XML als Antwort

Java analysiert XML als Antwort

高洛峰
高洛峰Original
2016-10-09 09:50:482272Durchsuche

package org.main;
import java.io.BufferedWriter;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStreamWriter;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.zip.GZIPInputStream;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.DefaultHttpClient;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo {
     
    public static GZIPInputStream getReponse(String _url) throws ClientProtocolException, IOException    
    {    
       
        DefaultHttpClient httpclient = new DefaultHttpClient();    
        HttpGet httpget = new HttpGet(_url);    
        HttpResponse response = httpclient.execute(httpget);    
        HttpEntity entity = response.getEntity();       
            InputStream inputs=entity.getContent();      
            GZIPInputStream in = new GZIPInputStream(inputs);
        return in;    
    }    
     
     
 @SuppressWarnings("rawtypes")
public static void main(String[] args) throws Exception {
        
        Map<String, String> map = new HashMap<String, String>();
        SAXReader reader = new SAXReader();
        Document document = reader.read(getReponse("http://wthrcdn.etouch.cn/WeatherApi?city=%E9%95%BF%E6%98%A5"));
        // 得到xml根元素
        Element root = document.getRootElement();
        // 得到根元素的所有子节点
        List<Element> elementList = root.elements();
         
     
        Iterator forecast =  root.elementIterator("forecast");
          if (forecast.hasNext()) {
             Element recordEless = (Element) forecast.next();
             Iterator weather =  recordEless.elementIterator("weather");
                 Element weatherNode = (Element) weather.next();
                 System.out.println();
                 System.out.println("date" + ":" + weatherNode.elementTextTrim("date"));
                 System.out.println("high" + ":" + weatherNode.elementTextTrim("high"));
                 System.out.println("low" + ":" + weatherNode.elementTextTrim("low"));
                 Iterator weatherNodeChild =  weatherNode.elementIterator("day");
                 Element dayNode = (Element) weatherNodeChild.next();
                 System.out.println();
                 System.out.println("type" + ":" + dayNode.elementTextTrim("type"));
                 System.out.println("fengxiang" + ":" + dayNode.elementTextTrim("fengxiang"));
                 System.out.println("fengli" + ":" + dayNode.elementTextTrim("fengli"));
         }      
           
          Iterator zhishus =  root.elementIterator("zhishus");
           while(zhishus.hasNext()) {
                 Element zhishusNode = (Element) zhishus.next();
                 Iterator zhishu =  zhishusNode.elementIterator("zhishu");
                 while(zhishu.hasNext()) {
                      Element zhishuNode = (Element) zhishu.next();
                     System.out.println();
                     System.out.println("name" + ":" + zhishuNode.elementTextTrim("name"));
                     System.out.println("value" + ":" + zhishuNode.elementTextTrim("value"));
                     System.out.println("detail" + ":" + zhishuNode.elementTextTrim("detail"));
                 }        
             }      
                   
 }
}

Kürzlich eine Wetterabfragefunktion für eine öffentliche Plattform erstellt. Das Prinzip besteht darin, Daten von der Schnittstelle abzurufen und an den Benutzer zurückzugeben. Die hier verwendete Schnittstelle gibt Daten vom Typ XML zurück. Verwenden Sie also dom4j zum Parsen.


Ich habe ursprünglich über die Verwendung von Document document = reader.read(); nachgedacht.

Dann ist sein Parameter ein Eingabestream, also habe ich darüber nachgedacht, wie ich ihn erstellen soll Die Get-Anfrage, die ich erhalten habe, wurde auch in einen Stream umgewandelt und fand, dass es etwas lächerlich war ... Holen wir uns zuerst den Return-Stream des Res von

      HttpGet httpget = new HttpGet(_url);    
        HttpResponse response = httpclient.execute(httpget);    
        HttpEntity entity = response.getEntity();       
            InputStream inputs=entity.getContent();

und übergebe es direkt an die read();-Methode. Es wurde ein Fehler gefunden, der besagt, dass es sich um einen Codierungsfehler handelt. . . Ich war verwirrt, denn der direkte Zugriff über den Browser ist UTF-8-Kodierung, was zum Teufel. . .

Verwenden Sie später „entity.getContentEncoding()“, um zu drucken und festzustellen, dass der Rückgabestrom gzip-codiert ist... Ri...


Verwenden Dekomprimieren Sie es einfach mit der Dekomprimierung, die mit Java geliefert wird....

GZIPInputStream in = new GZIPInputStream(inputs);

Dieser Artikel stammt aus dem Blog „TheAuroraSec“. Bitte bewahren Sie diese Quelle unbedingt auf: http://aurorasec.blog.51cto. com/9752323/ 1859599

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn