我是新手,我正在尝试从XML互联网收集所有数据,到目前为止一切正常但无法找到解决方案来捕捉“dia”标签的“fecha”属性并打印出来在TextView上。谁能帮我?还有一个问题,我如何在textview中打印这些值?
<temperatura>
<maxima> 14 </ maxima>
<minima> 5 </ minima>
<dato hora="06"> 6 </ dato >
<dato hora="12"> 12 </ dato >
<dato hora="18"> 13 </ dato >
<dato hora="24"> 10 </ dato >
</ temperatura>
XML:
<prediccion>
<dia fecha="2014-02-25">
<prob_precipitacion periodo="00-24"/>
<prob_precipitacion periodo="00-12"/>
<prob_precipitacion periodo="12-24">15</prob_precipitacion>
<prob_precipitacion periodo="00-06"/>
<prob_precipitacion periodo="06-12">0</prob_precipitacion>
<prob_precipitacion periodo="12-18">5</prob_precipitacion>
<prob_precipitacion periodo="18-24">0</prob_precipitacion>
<cota_nieve_prov periodo="00-24"/>
<cota_nieve_prov periodo="00-12"/>
<cota_nieve_prov periodo="12-24"/>
<cota_nieve_prov periodo="00-06"/>
<cota_nieve_prov periodo="06-12"/>
<cota_nieve_prov periodo="12-18"/>
<cota_nieve_prov periodo="18-24"/>
<estado_cielo periodo="00-24" descripcion=""/>
<estado_cielo periodo="00-12" descripcion=""/>
<estado_cielo periodo="12-24" descripcion="Muy nuboso">15</estado_cielo>
<estado_cielo periodo="00-06" descripcion=""/>
<estado_cielo periodo="06-12" descripcion="Poco nuboso">12</estado_cielo>
<estado_cielo periodo="12-18" descripcion="Muy nuboso">15</estado_cielo>
<estado_cielo periodo="18-24" descripcion="Cubierto">16n</estado_cielo>
<viento periodo="00-24">...</viento>
<viento periodo="00-12">...</viento>
<viento periodo="12-24">...</viento>
<viento periodo="00-06">...</viento>
<viento periodo="06-12">...</viento>
<viento periodo="12-18">
<direccion>SO</direccion>
<velocidad>10</velocidad>
</viento>
<viento periodo="18-24">...</viento>
<racha_max periodo="00-24"/>
<racha_max periodo="00-12"/>
<racha_max periodo="12-24"/>
<racha_max periodo="00-06"/>
<racha_max periodo="06-12"/>
<racha_max periodo="12-18"/>
<racha_max periodo="18-24"/>
<temperatura>
<maxima>14</maxima>
<minima>5</minima>
<dato hora="06">6</dato>
<dato hora="12">12</dato>
<dato hora="18">13</dato>
<dato hora="24">10</dato>
</temperatura>
<sens_termica>...</sens_termica>
<humedad_relativa>
<maxima>100</maxima>
<minima>65</minima>
<dato hora="06">95</dato>
<dato hora="12">65</dato>
<dato hora="18">75</dato>
<dato hora="24">100</dato>
</humedad_relativa>
<uv_max>3</uv_max>
</dia>
<dia fecha="2014-02-26">
...
</dia>
RSSReader.java
public class RSSReader {
DefaultHttpClient httpClient = new DefaultHttpClient();
public Document getRSSFromServer(String url) {
Document response = null;
response = getDomFromXMLString(getFeedFromServer(url));
return response;
}
private String getFeedFromServer(String url) {
String xml = null;
if (android.os.Build.VERSION.SDK_INT > 9) {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
.permitAll().build();
StrictMode.setThreadPolicy(policy);
}
try {
HttpGet httpget =new HttpGet(url);
//HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpget);
HttpEntity httpEntity = httpResponse.getEntity();
xml = EntityUtils.toString(httpEntity);
} catch (Exception e) {
e.printStackTrace();
}
return xml;
}
private Document getDomFromXMLString(String xml) {
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);
} catch (Exception e) {
}
return doc;
}
public String getValue(Element item, String key) {
NodeList nodeList = item.getElementsByTagName(key);
return this.getElementValue(nodeList.item(0));
}
public final String getElementValue(Node node) {
Node child;
if (node != null) {
if (node.hasChildNodes()) {
for (child = node.getFirstChild(); child != null; child = child
.getNextSibling()) {
if (child.getNodeType() == Node.TEXT_NODE) {
return child.getNodeValue();
}
}
}
}
return "";
}
}
MainActivity.java
String key_items = "dia"; //dia
String key_title = "prob_precipitacion"; //prob_precipitacion
String key_description = "estado_cielo"; //estado_cielo
String key_link = "viento"; //viento
String key_date = "temperatura"; //temperatura
//humedad_relativa ¿HORA?
String key_max = "maxima"; //max
String key_min = "minima"; //min
String key_hour = "hora"; //dato / Hora
String key_fecha = "fecha";
ListView lstPost = null;
List<HashMap<String, Object>> post_lists = new ArrayList<HashMap<String, Object>>();
List<String> lists = new ArrayList<String>();
ArrayAdapter<String> adapter = null;
RSSReader rssfeed = new RSSReader();
public void onCreate(Bundle savedInstanceState) {...}
private class downloadWeather extends AsyncTask<Void, Void, Void>{
@Override
protected void onPreExecute() {
super.onPreExecute();
progressDialog = new ProgressDialog(MainActivity.this);
progressDialog.setMessage("Cargando tiempo actual...");
progressDialog.setIndeterminate(false);
progressDialog.show();
}
@Override
protected Void doInBackground(Void... params) {
return null;
}
@Override
protected void onPostExecute(Void args) {
lstPost = (ListView) findViewById(R.id.listaaa);
adapter = new ArrayAdapter<String>(MainActivity.this,R.layout.weather_item, R.id.TextView02, lists) {
@Override
public View getView(int position, View convertView, ViewGroup parent) {
View view = super.getView(position, convertView, parent);
// horaaemet // maxaemet // minaemet // fechaaemet // imgaemet // probabiaemet
TextView txt1 = (TextView) view.findViewById(R.id.probabiaemet);
TextView txt2 = (TextView) view.findViewById(R.id.horaaemet);
TextView txt3 = (TextView) view.findViewById(R.id.maxaemet);
TextView txt4 = (TextView) view.findViewById(R.id.minaemet);
TextView txt5 = (TextView) view.findViewById(R.id.fechaaemet);
ImageView txt6 = (ImageView) view.findViewById(R.id.imgaemet);
HashMap<String, Object> data = post_lists.get(position);
txt1.setText(data.get(key_title).toString());
txt3.setText(data.get(key_max).toString());
txt4.setText(data.get(key_min).toString());
//txt5.setText(data.get(key_fecha).toString());
return view;
}
};
Document xmlFeed = rssfeed.getRSSFromServer("http://www.aemet.es/xml/municipios/localidad_41065.xml"); //http://beta.studentitzone.com/rssfeed
NodeList nodes = xmlFeed.getElementsByTagName("dia");
for (int i = 0; i < nodes.getLength(); i++) {
Element item = (Element) nodes.item(i);
HashMap<String, Object> feed = new HashMap<String, Object>();
feed.put(key_title, rssfeed.getValue(item, key_title));
feed.put(key_max, rssfeed.getValue(item, key_max)+"º");
feed.put(key_min, rssfeed.getValue(item, key_min)+"º");
post_lists.add(feed);
lists.add(feed.get(key_title).toString());
//Log.e("VALOR -> ", "attribute value = " + item.getAttribute( "fecha" ) );
//It's works. Show Attribute but, How I can put this result in a textview?
}
lstPost.setAdapter(adapter);
progressDialog.dismiss();
}
}