AW: HTML und Regex, ICH DREH DURCH!
hi,
meiner meinung nach sieht dein code soweit ok aus.
kannst ja mal den entsprechenden HTML-auszug deiner mensaseite posten.
für das testen von regulären ausdrücken nutze ich meist http://gskinner.com/RegExr/
--> html dort in das große feld eingeben und ob en den regex. funktioniert schön mit ( ) gruppen etc.
vielleicht hilft dir das beim testen.
mfg
Rumbel
AW: [Hilfe] HTML und Regex
Hier mal ein Auszug, bzw. hier die ganze Seite (http://www.sw-bs.de/braunschweig/essen/menus/mensa-1).
Bei dem von dir geposteten Link funktioniert übrigens alles problemlos ^^
Egal ob ich da jetzt "<td.*", ".*?td.*" oder sonstige Sachen bauen. Sogar mehrere Tags sind möglich ".*?(td|tr|th).*". Nur in meiner App funktionierts natürlich nicht ^^
Was mir Aufgefallen ist, ich schreibe ja per
Code:
twTest.setText(""+readHTML.size() + " "+ readHTML.toString());
Die Länge und alle Einträge in den Textview, wenn ich allerdings "td" drinhabe bleibt der TextView komplett leer, normalerweise würde "0 []" angezeigt.
Noch zur Info, ich lese vorher einfach die komplette Seite in eine LinkedList ein, aber das sollte doch kein Problem sein oder?
HTML-Code:
<table class="swbs_speiseplan" id="swbs_speiseplan_mo">
<tr class="swbs_speiseplan_head_tr">
<th class="swbs_speiseplan_head" colspan="2">Montag, 5. Juli 2010 – Mittagsmensa</th>
<th class="swbs_speiseplan_head_price_s">Stud.</th>
<th class="swbs_speiseplan_head_price_e">Bed.</th>
<th class="swbs_speiseplan_head_price_g">Gäste</th>
</tr>
<tr class="swbs_speiseplan_grey">
<td class="swbs_speiseplan_kind_meal"><nobr>Essen A</nobr></td>
<td class="swbs_speiseplan_meal">Terrine Käsesuppe(11) mit Mettbällchen (s)</td>
<td class="swbs_speiseplan_price_s">1,20 €</td>
<td class="swbs_speiseplan_price_e">2,50 €</td>
<td class="swbs_speiseplan_price_g">3,20 €</td>
</tr>
<tr class="swbs_speiseplan_white">
<td class="swbs_speiseplan_kind_meal"><nobr>Essen B</nobr></td>
<td class="swbs_speiseplan_meal">Heringshappen(2,3) mit Apfel und Gurke(9)</td>
<td class="swbs_speiseplan_price_s">1,20 €</td>
<td class="swbs_speiseplan_price_e">2,50 €</td>
<td class="swbs_speiseplan_price_g">3,00 €</td>
</tr>
<tr class="swbs_speiseplan_grey">
<td class="swbs_speiseplan_kind_meal"><nobr>Essen C</nobr></td>
<td class="swbs_speiseplan_meal">Mailänder Kotelett mit Tomatensauce (s)</td>
<td class="swbs_speiseplan_price_s">1,70 €</td>
<td class="swbs_speiseplan_price_e">3,00 €</td>
<td class="swbs_speiseplan_price_g">3,50 €</td>
</tr>
AW: [Hilfe] HTML und Regex
Alles zurück!!
Hab nochmal ein 2. TextView angelegt, der mir nur die Länge der Liste anzeigt, und siehe da, es funktioniert doch. Keine Ahnung was den 1. TextView so zerhaut, aber intern sind die Daten da ^^
AW: [Hilfe] HTML und Regex
poste doch mal den gesamten code, vielleicht überschreibst du irgendwo selbst dein twTest. ;-)
AW: [Hilfe] HTML und Regex
Den TextView twTest zerhaut es wenn ich nach td suche, ist aber jetzt auch kein Riesenproblem, dient nur zur Kontrolle.
package app.mensa;
import android.app.Activity;
import android.view.*;
import android.view.View.OnClickListener;
import android.os.Bundle;
import android.widget.Button;
import android.widget.TextView;
import java.net.*;
import java.util.LinkedList;
import java.util.ListIterator;
import java.io.*;
public class Mensa extends Activity implements OnClickListener{
private TextView twTest;
private TextView twCount;
private Button filterBtn;
private LinkedList<String> readHTML;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
twTest = (TextView) findViewById(R.id.twTest);
twCount = (TextView) findViewById(R.id.TextView01);
filterBtn = (Button) findViewById(R.id.filterBtn);
filterBtn.setOnClickListener(this);
readHTML = new LinkedList<String>();
readMensaplan();
}
public void onClick(View v) {
switch (v.getId()) {
case R.id.filterBtn:
filterHTML();
}
}
public void filterHTML() {
ListIterator<String> it = readHTML.listIterator();
while(it.hasNext()) {
String s = (String) it.next();
if(!s.matches(".*(<td|<table|<tr|<th).*"))
it.remove();
else {
s = s.replaceAll("<[^<]+?>", "");
//s = hexToChar(s);
it.set(s);
}
}
twTest.setText(""+readHTML.size() + " " + readHTML.toString());
twCount.setText(""+readHTML.size() + " " + readHTML.get(5));
}
/*public String hexToChar(String input) {
input = input.replaceAll("ä", "ä");
input = input.replaceAll("–", "-");
input = input.replaceAll("ä", "ä");
input = input.replaceAll("€", "€");
return input;
}*/
public void readMensaplan() {
try {
URL mensaPlanBs1 = new URL("http://www.sw-bs.de/braunschweig/essen/menus/mensa-1");
BufferedReader in = new BufferedReader(
new InputStreamReader(
mensaPlanBs1.openStream()));
String inputLine;
while ((inputLine = in.readLine()) != null) {
inputLine.trim();
readHTML.add(inputLine);
}
twTest.setText(""+readHTML.size());
in.close();
}
catch (IOException e) {
e.printStackTrace();
}
}
}
AW: [Hilfe] HTML und Regex
Also bei mir funzt deine regular expression.
Edit: Mhh, Thread ganz lesen wäre wohl auch keine schlechte Idee ;)
List<String> htmlList = new ArrayList<String>();
URL mensaURL;
try {
mensaURL = new URL("http://www.sw-bs.de/braunschweig/essen/menus/mensa-1/index.php");
URLConnection mensaURLConnection = mensaURL.openConnection();
BufferedReader in = new BufferedReader(new InputStreamReader(mensaURLConnection.getInputStream()));
String line;
while ((line = in.readLine()) != null)
htmlList.add(line);
in.close();
Iterator it = htmlList.iterator();
while(it.hasNext()) {
String s = (String) it.next();
if(!s.matches(".*?td.*"))
it.remove();
else
Log.v("test", s);
}
} catch (Exception e) {
// i don't care
e.printStackTrace();
}