Parsen ungültig Et-Zeichen mit Android XmlPullParser
-
20-09-2019 - |
Frage
Ich bin ein wenig Screen-Scraping-App zu schreiben, dass einige XHTML verbraucht - es versteht sich von selbst, dass die XHTML ungültig ist. Et-Zeichen sind nicht als &
entkam
Ich bin mit Android XmlPullParser
und es spuckt die folgenden Fehler auf den falsch codierten Wert:
org.xmlpull.v1.XmlPullParserException: unterminated entity ref
(position:START_TAG <a href='/Fahrinfo/bin/query.bin/dox?ld=0.1&n=3&i=9c.0323581.1266265347&rt=0&vcra'>
@55:134 in java.io.InputStreamReader@43b1ef70)
Wie erhalte ich diese um? Ich habe darüber nachgedacht, die folgenden Lösungen:
- Wrapping die
InputStream
in einem anderen, der die kaufmännische Und-Zeichen mit Entität Refs ersetzt - Konfigurieren des Parser, so dass es auf magische Weise die falsche Markup akzeptiert
Welche diejenigen wahrscheinlich ist, erfolgreicher zu sein?
Lösung
würde ich mit Ihrer ersten Wahl gehen, die Et-Zeichen ersetzen mehr eine fit Lösung scheint als die andere. Die zweite Option scheint eher ein Hack , um es durch die Annahme falsch Markup an der Arbeit.
Andere Tipps
Ich war für etwa eine Stunde auf diesem stecke vor, dass es in meinem Fall herauszufinden, war die „&“, die nicht von dem XML-Parser aufgelöst werden konnte, so dass ich die Lösung gefunden. So, hier ist ein Code-Snippet, das es vollständig beheben.
void ParsingActivity(String r) {
try {
parserCreator = XmlPullParserFactory.newInstance();
parser = parserCreator.newPullParser();
// Here we give our file object in the form of a stream to the
// parser.
parser.setInput(new StringReader(r.replaceAll("&", "&")));
// as a SAX parser this will raise events/callback as and when it
// comes to a element.
int parserEvent = parser.getEventType();
// we go thru a loop of all elements in the xml till we have
// reached END of document.
while (parserEvent != XmlPullParser.END_DOCUMENT) {
switch (parserEvent) {
// if u have reached start of a tag
case XmlPullParser.START_TAG:
// get the name of the tag
String tag = parser.getName();
ziemlich viel, was ich tue, ich bin nur die &
mit &
ersetzen, da ich mit Parsen einer URL zu tun hatte.
Hoffe, das hilft.