Processar um xml online em java

estou a tentar processar o xml de

Http://free.worldweatheronline.com/feed/weather.ashx?key=14d7241962022903123108&q=Pittsburgh,pa

tudo o que preciso é de uma sequência da descrição do tempo da etiqueta "weatherDesc"

eu tentei

    URL url = new URL("http://free.worldweatheronline.com/feed/weather.ashx?key=14d7241962022903123108&q=Pittsburgh,pa.xml");
    URLConnection conn = url.openConnection();

    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse(conn.getInputStream());
O que preciso de Adicionar para escolher o weatherDesc?

Author: Community, 2012-08-31

2 answers

Se apenas quiser o valor de um único elemento, sugiro usar a APIs {[[0]} incluída no JDK/JRE. Por exemplo, veja:

 1
Author: Blaise Doughan, 2017-05-23 12:19:29

Use SAX o analisador ou DOM o analisador para isto.......

Estou a dar-te um exemplo de trabalho do analisador SAX , para parsing a informação meteorológica na forma de XML

A Actividade Principal:

public class WhetherXMLParsingAppActivity extends Activity {

    EditText editCity;
    EditText editState;
    TextView textCurrW;
    Button showButt;
    HandlingXmlStuff doingWork;


    final String baseURL ="http://www.google.com/ig/api?weather=";


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        editCity = (EditText)findViewById(R.id.edit_City);
        editState = (EditText)findViewById(R.id.edit_State);
        textCurrW = (TextView)findViewById(R.id.text_CurrWhether);
        showButt = (Button)findViewById(R.id.button_Show);

        showButt.setOnClickListener(new OnClickListener() {

            public void onClick(View v) {

                 String c = editCity.getText().toString();
                 String s = editCity.getText().toString();

                 StringBuilder URL = new StringBuilder(baseURL);
                 URL.append( c + "," + s);

                 String fullURL = URL.toString();


                 try {
                    URL website = new URL(fullURL);
                     SAXParserFactory spf = SAXParserFactory.newInstance();
                     SAXParser sp = spf.newSAXParser();
                     XMLReader xr = sp.getXMLReader();
                     doingWork = new HandlingXmlStuff();
                     xr.setContentHandler(doingWork);
                     xr.parse(new InputSource(website.openStream()));

                     String endResult = doingWork.getInfo();

                     textCurrW.setText(endResult);
                } catch (Exception e) {
                         textCurrW.setText("Error");
                } 



            }
        });

    }
}

A classe de tratamento de XML:

public class HandlingXmlStuff extends DefaultHandler{

    XmlDataCollected xdc = new XmlDataCollected();
    @Override
    public void startElement(String uri, String localName, String qName,
            Attributes attributes) throws SAXException {
        // TODO Auto-generated method stub
        super.startElement(uri, localName, qName, attributes);

        if (localName.equals("city")) {
        String city = attributes.getValue("data");
        xdc.setCity(city);

        }else if (localName.equals("temp_f")) {

            String t = attributes.getValue("data");
            int temp = Integer.parseInt(t);
            xdc.setTemp(temp);


        }


    }
    public String getInfo() {

        return xdc.dataToString();
    }



}

Classe De Tratamento De Dados:

public class XmlDataCollected {

    private int temp;
    private String city;


    public void setTemp(int temp) {

        this.temp = temp;

    }

    public void setCity(String city) {

        this.city = city;
    }


    public String dataToString() {

        return "In " + city + " the Temperature in Farenheit is " + temp + " degress ";

    }


}
 1
Author: Kumar Vivek Mitra, 2012-08-31 17:35:41