android-utf-8-Datei Parsen
Habe ich einige .xml
- Dateien, die codiert werden in UTF-8
. Aber immer wenn ich versuche zu analysieren, Sie auf meinem tablet (idea pad, lenovo, android 3.1), bekomme ich den gleichen Fehler:
org.xml.SAXParseException: Unexpected token (position: TEXT @1:2 in
java.io.StringReader@40bdaef8).
Diese sind die Linien, Ausnahme:
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource inputSource = new InputSource();
inputSource.setCharacterStream(new StringReader(xmlData));
Document doc = db.parse(inputSource); //This line throws exception
Hier mein input:
public String getFromFile(ASerializer aserializer) {
String filename = aserializer.toLocalResource();
String data = new String();
try {
InputStream stream = _context.getResources().getAssets().open(filename);
BufferedReader reader = new BufferedReader(new InputStreamReader(stream));
StringBuilder str = new StringBuilder();
String line = null;
while((line = reader.readLine()) != null) {
str.append(line);
}
stream.close();
data = str.toString();
}
catch(Exception e) {
}
return data;
}
XML-Datei:
<Results>
<Result title="08/07/2011">
<Field title="Company one" value="030589674"/>
<Field title="Company two" value="081357852"/>
<Field title="Company three" value="093587125"/>
<Field title="Company four" value="095608977"/>
</Result>
<Result title="11/07/2011">
<Field title="Company one" value="030589674"/>
<Field title="Company two" value="081357852"/>
</Result>
</Results>
Ich will nicht, um Sie zu konvertieren ANSI
, so gibt es einen Weg, um die db.parse()
Arbeit?
- ,,Ihre xml-Datei plz...
- es würde wirklich Sinn machen, wenn Sie zeigte sample-Eingang mit, dass
- Wie haben Sie Lesen
xmlData
? Ich vermute, dass irgend etwas lief da schief. - Die Bearbeitung meiner ursprünglichen Antwort, die die Methode liest die Daten.
- stackoverflow.com/questions/7870593/...
- Wie ist xmlData immer geladen? String speichert die Daten als UTF-16, also vermutlich ein problem mit der Initialisierung, oder die XML-Datei korrupt, ein Beispiel würde helfen.
- Hinzufügen ein Teil des xml auf meinem ursprünglichen post.
- OT: es scheint komisch zu mir, mit einem StreamReader zu Lesen, durch einen BufferedReader zum Einlesen in einen String zu Parsen mit SAX-parser. Ich bin mir ziemlich sicher, dass der SAX-parser kann direkt auf das stream/reader und viel mehr effizient
- effizienter und mehr richtig.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In dieser Zeile:
Den Sie gerade Lesen, von
stream
Nutzung der Plattform Standard-Kodierung. Das ist fast sicher nicht, was Sie wollen. Sie müssten zu prüfen, die XML für die eigentliche Codierung und die richtige Art und Weise zu tun, ist etwas kompliziert.Zum Glück, jeder vernünftige XML-parser (inklusive der Java - /Android) kann das allein tun. Um den XML-parser machen, übergeben Sie einfach in den
stream
selbst, anstatt zu versuchen, ihn manuell zu Lesen.String
. Erstellen Sie einfach einenInputSource
von derstream
- und übergeben, die an den parser.Reader
!InputSource
hat ein Konstruktor, einInputStream
!String
manuell vor der Analyse ist eine schlechte Idee. Wenn Sie Ihre Eingabe (irgendwann) eineInputStream
dann sollten Sie immer pass , dieInputStream
an den parser.Sind Sie sehr wahrscheinlich mit einer XML-Datei mit einem BOM-Marke (Byte Order Mark).
Entweder eine API, erkennt das die Codierung aus der Stückliste
Alternativ Vorverarbeiten, dass die Datei keine BOM vorhanden ist.
Ihre java-string in einen UTF-16-Kodierung standardmäßig verwendet werden. Wenn Sie nicht verwenden können, InputStream, wie @Joachim Sauer vorgeschlagen, dann versuchen Sie dies: