Java : Abrufen der nächsten untergeordneten Knoten mit SAXParser
Ich habe die folgende XML-Struktur :
<?xml version="1.0" encoding="UTF-8"?>
<root>
<person name="foobar">
<age>45</age>
<city>SOTown</city>
</person>
<person name="tester">
<age>51</age>
<city>There</city>
</person>
</root>
Ich bin mit SAXParser und ich kann die Knoten-Elemente wie dieses (es ist vereinfacht) :
ArrayList<Person> persons = new ArrayList<Person>();
public void startElement(String uri, String localName,String qName,
Attributes attributes) throws SAXException {
if (name.equals("person")){
Person p = new Person();
p.name = attributes.getValue("name");
p.age = ???
p.city = ???
}
public void endElement(String uri, String localName,
String qName) throws SAXException {
}
Das problem ist, an die p.age
und p.city
Linien.
Wie kann ich das Kind-Knoten-Werte ?
Danke.
InformationsquelleAutor ulrich pattersen | 2011-12-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ändern Sie können die content-handler, die während der Verarbeitung, die es Ihnen ermöglicht, den Status beizubehalten und tun kontextuellen Verarbeitung. Zum Beispiel, betrachten Sie dieses Selbstversorger-Beispiel:
Beachten Sie, dass wir
setContentHandler
wenn wir auch eineperson
element. DiePersonHandler
sieht wie folgt aus:Beachten Sie, dass wir einen reset der content-handler der übergeordneten handler, wenn wir fertig sind die Bearbeitung der
person
.Vollständigkeit halber, hier ein (sehr) minimal
Person
:Dieser code ausgegeben:
Sorry mate, aber ich glaube nicht, dass dies so funktioniert, wie Sie es wollen. Aussehen: die Start-Element aufgerufen wird, durch die Zeit, die Sie schauen auf das Kind. Es gibt keinen Weg, um Attribute von den Eltern, und doch in der PersonHandler Klasse, da haben wir Sie zu versuchen, um das Attribut "name" der name der person. Nun, es ist zu spät, das zu tun, müssten wir, um es von SAXHandler. Oder gibt es einen anderen Weg, das zu tun?
FYI, ich werde versuchen, diese zu lösen, indem in der localname, qname und Attribute in der PersonHandler und erzeugen Person-Objekt im Konstruktor. Ich denke, das wird besser funktionieren, vor allem für schemas, in denen ein Knoten enthalten kann, die eine weitere Instanz der eigenen Klasse (dh, eine Person, enthalten kann eine person)
Guten Fang @IcedDante. Sie haben vollkommen Recht, da ist deine vorgeschlagene Lösung. Ich aktualisiert meine Antwort.
InformationsquelleAutor Wayne Burkett
Können Sie nicht direkt, Sie müsste um eine Boolesche Instanz-variable
geben Sie nun in eine
person
element, und legen Sie die Attribute Personeninnerhalb der
endElement
Methode. Der Charakter Inhalt übergeben bekommt, um diecharacters
Methode und muss angehängt werden, um einen Puffer, da der parser isterlaubt diese Methode mehrmals aufrufen.
InformationsquelleAutor Jörn Horstmann
Diesen code verwenden : Ersetzen Sie start und End-Elemente an und Deklarieren die Person-Klasse-Objekt in top...
Irgendwelche Zweifel oder Anregung ?, Sie sind willkommen...
InformationsquelleAutor Mohamed Hisham Ibn Hanifa