SAX-parsing: wie abrufen von untergeordneten Knoten
Ich bin mit SAX Parsen in android. Für die folgende XML:
<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
<channel>
<title>Game Analysis</title>
<item>
<title>GTA</title>
<description>ABC</description>
<pubDate>Sat, 21 Feb 2012 05:18:23 GMT</pubDate>
<enclosure type="audio/mpeg" url="http://URL.mp3" length="6670315"/>
</item>
<item>
<title>CoD</title>
<description>XYZ</description>
<pubDate>Sat, 21 Feb 2011 05:18:23 GMT</pubDate>
<enclosure type="audio/mpeg" url="http://URL.mp3" length="6670315"/>
</item>
</channel>
</rss>
Ich brauche zu Holen, das erste mal vor <title>
(nur unten ).
Dann von jedem block, die ich wieder brauchen, um zu extrahieren <title> & <enclosure>
.
Kann ich Holen die ersten <title>
mit:
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
if (qName.equals("Titel"))
...
}
Aber, wie soll ich Holen Sie die tags in <item> block
?
werfen Sie einen Blick auf dieses stackoverflow.com/a/8354781/1292203
danke..aber wie soll ich unterscheiden, zwischen dem ersten Titel-tag und der der drin posten
Hast du die Antwort finden.wenn ja, dann bitte akzeptieren Sie die Antwort,so dass es nützlich für andere.
danke..aber wie soll ich unterscheiden, zwischen dem ersten Titel-tag und der der drin posten
Hast du die Antwort finden.wenn ja, dann bitte akzeptieren Sie die Antwort,so dass es nützlich für andere.
InformationsquelleAutor reiley | 2013-01-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ist hier, wie ich getan habe, dass mit SAX.
Habe ich geändert ein Bissen Ihrer XML-Datei.
XML-Datei
Personen
Kanal
Gehäuse
Element
Handler
ChannelHandler
Manager
XMLManager
Die wichtigsten
MyMain
Ausgabe in der Konsole
Also es funktioniert 😉
InformationsquelleAutor loikkk
Verwenden Sie einen Stapel (oder ähnlich) und denken Sie daran, was Sie brauchen. SAX ist Ereignis-basiert, und daher haben Sie zum verwalten von Informationen über, wo Sie auf Ihrem eigenen.
Betrachten Sie so etwas wie dieses:
InformationsquelleAutor meredrica
SAX ist das falsche Werkzeug für diese Aufgabe. Deine Anforderungen würde leicht gelöst werden, mithilfe von DOM und XPath.
so hat DOM. Und ich habe keine Ahnung, was "ein bisschen schwer" bedeutet. Wenn Sie reduzieren die Menge an code, den Sie schreiben, das scheint leichter zu mir. Aber es ist dein Projekt, also Mach, was dich glücklich macht.
dom erzeugt eine Tonne von Objekten auf einmal und ist in der Regel eine schlechte Wahl, die auf jedem mobilen Plattform. Je nach XML-Größe, Sie können sogar töten Ihre heap space - Sie können nicht nur analysieren, eine 100 MB-XML-Datei in ein dom-Modell auf android.
Ich Schätze, dass Sie erklärt Ihre downvote. Aber Ihre Argumentation ist gefüllt mit FUD. First off, würde ich die Frage beliebiger design, das versucht, zu analysieren beliebiger 100 Mb Datei auf einem mobilen Gerät. Haben Sie eigentlich zu tun hatte? Zweitens, während ich bin damit einverstanden, dass die DOM erzeugt eine Menge von Objekten, haben Sie sich schon einmal überlegt, wie viele Objekt-SAX erstellt? Die zugrunde liegenden Daten ist die gleiche, entweder in form; ein DOM, in der Tat, wurde mit der SAX-parser. Es einfach hält auf alle Objekte, anstatt sofort übergeben Sie dem garbage collector.
ja ich habe das getan, eine million mal. und Sie müssen es tun, viel mehr, als Sie migh denken. vielleicht nicht 100 mb, aber du bist wirklich wirklich schnell bei 20-30 mb und das ist schon zu viel. SAX hat keine unnötigen Objekte überhaupt. Es schafft nur die Objekte, die Sie später brauchen, weil Sie selbst Ihnen zu schaffen. Wenn Sie sprengen das heap space mit SAX, müssen Sie wiederholen Sie Ihr design, oder verwenden Sie eine Datenbank dazwischen. wenn Sie nur einen SAX-parser und leiten Sie es, die XML -, werden Sie nicht die Zuteilung einer Menge von Objekten per se. vergleichen Sie das mit DOM.
InformationsquelleAutor parsifal
Im Ort SAX-parser verwenden, Dom-parser und Unten ist die vollständige Antwort:-
InformationsquelleAutor androiddeveloper2011