T
tito286
Neues Mitglied
- 0
Hallo allerseits,
ich bin absolut neu in der Android App Entwicklung und möchte eine App, die mir bestimmte Texte einer HTML Seite ausgibt.
Habe über ein Tutorial (Wetterapp) eine Code gefunden der an sich funktioniert. Jedoch nicht bei jeder (HTML)Seite.
Vorweg: Das die Baumstruktur der HTML Datei für dieses Programm eindeutig sein muss ist mir klar. Die App ist eigentlich für WetterAPIs gedacht, daher nicht wundern dass ich einen Teil per // rausgenommen hab.
Hier die ersten Zeilen in XML der Seite bei der es klappt:
<!--?xml version="1.0" encoding="utf-8"?-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> </head>
Hier kann ich problemlos über den Pfad in XML(z.B.: html/) ein Item (z.B.: "lang") ausgeben lassen.
Bei folgender Seite haut das nicht hin obwohl der XML Text als String eingelesen wird:
<!DOCTYPE html>
<html lang="de-de" dir="ltr">
<head> </head>
Habe einige Versuche gemacht aber es klappt nicht. Habe C/C++ Grundkenntnisse aber was JAVA & (und vor allem) HTML angeht, bin ich unbedarft.
Hat jemand hierzu eine Idee bzw. Lösungsvorschläge?
Vielen Dank im Voraus!
hier noch der wesentliche Teil des Codes...
ich bin absolut neu in der Android App Entwicklung und möchte eine App, die mir bestimmte Texte einer HTML Seite ausgibt.
Habe über ein Tutorial (Wetterapp) eine Code gefunden der an sich funktioniert. Jedoch nicht bei jeder (HTML)Seite.
Vorweg: Das die Baumstruktur der HTML Datei für dieses Programm eindeutig sein muss ist mir klar. Die App ist eigentlich für WetterAPIs gedacht, daher nicht wundern dass ich einen Teil per // rausgenommen hab.
Hier die ersten Zeilen in XML der Seite bei der es klappt:
<!--?xml version="1.0" encoding="utf-8"?-->
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html lang="en" xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head> </head>
Hier kann ich problemlos über den Pfad in XML(z.B.: html/) ein Item (z.B.: "lang") ausgeben lassen.
Bei folgender Seite haut das nicht hin obwohl der XML Text als String eingelesen wird:
<!DOCTYPE html>
<html lang="de-de" dir="ltr">
<head> </head>
Habe einige Versuche gemacht aber es klappt nicht. Habe C/C++ Grundkenntnisse aber was JAVA & (und vor allem) HTML angeht, bin ich unbedarft.
Hat jemand hierzu eine Idee bzw. Lösungsvorschläge?
Vielen Dank im Voraus!
hier noch der wesentliche Teil des Codes...
Code:
public void btnSearchClick(View view)
{
if(texteingabe.getText().length() < 3 )
{
textausgabe.setText("Stadt angeben ... ");
}
else
{
String xmlcode = getWeatherXML();
textausgabe.setText(parseXML(xmlcode)); //xml holen & parsen !!!!!!
}
}
public String getWeatherXML()
{
//String cityString = texteingabe.getText().toString();
HttpGet getRequest = new HttpGet(xmlurl); // + cityString.replace(" ", "%20")
try{
HttpResponse getResponse = httpcli.execute(getRequest);
final int statusCode = getResponse.getStatusLine().getStatusCode(); //http statusCodes prüfen
if(statusCode != HttpStatus.SC_OK) { //falls fehlermeldung
return null;
}
HttpEntity getResponseEntity = getResponse.getEntity();
if (getResponseEntity != null) {
return EntityUtils.toString(getResponseEntity); //xml string zurück
}
}
catch(Exception ex) {
getRequest.abort(); //request abbrechen
textausgabe.setText("Error loading XML");
}
return null;
}
private Document stringToDoc(String xmldata) //String in Doc wandeln
{
try{
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
return builder.parse(new InputSource(new StringReader(xmldata)));
}catch (Exception ex) {
return null;
}
}
private String parseXML(String xml)
{
String expression = "/current/member";
try{
XPath xpath = XPathFactory.newInstance().newXPath();
Node xmlnode = (Node) xpath.evaluate(expression, stringToDoc(xml), XPathConstants.NODE);
return xmlnode.getAttributes().getNamedItem("vorstand").getNodeValue();
} catch(Exception ex) {
return "Error while parsing XML";