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?
2
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