Java : Arriver le prochain nœud enfant avec SAXParser
J'ai la structure XML suivante :
<?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>
Je suis en utilisant SAXParser et je peux obtenir le nœud comme cela (c'est simplifié) :
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 {
}
Le problème est à la p.age
et p.city
lignes.
Comment puis-je obtenir les nœuds enfants des valeurs ?
Merci.
OriginalL'auteur ulrich pattersen | 2011-12-22
Vous devez vous connecter pour publier un commentaire.
Vous pouvez modifier le gestionnaire de contenu en cours de traitement, ce qui permet de maintenir l'état et ne contextuel de traitement. Prenons l'exemple de cette auto-contenue exemple:
Avis que nous
setContentHandler
chaque fois que nous rencontrons unperson
élément. LePersonHandler
ressemble à ceci:Avis que nous réinitialiser le gestionnaire de contenu pour le parent gestionnaire à chaque fois que nous avons terminé le traitement de la
person
.Pour être complet, voici un (très) limitées
Person
:Ce code de sortie:
Désolé mate, mais je ne pense pas que cela fonctionne de la façon dont vous le souhaitez. Look: le premier Élément est appelé au moment où vous êtes à la recherche à l'enfant. Il n'y a aucun moyen d'obtenir les attributs de la mère, et pourtant, dans le PersonHandler classe, nous vous essayer d'obtenir de l'attribut "name" par le nom de la personne. Eh bien, il est trop tard pour le faire, nous aurions du l'obtenir à partir d'SAXHandler. Ou est-il une autre façon de le faire?
Pour info, je vais tenter de résoudre ce problème en passant dans le localname, qname et les attributs dans le PersonHandler et de la création de la Personne objet dans le constructeur. Je pense que ce sera mieux travailler, en particulier pour les schémas où un nœud peut contenir un autre exemple de sa propre classe (c'est à dire, une Personne qui peut contenir une personne)
Bonne prise @IcedDante. Vous avez tout à fait raison, comme l'est votre solution proposée. J'ai mis à jour ma réponse.
OriginalL'auteur Wayne Burkett
Vous ne pouvez pas directement, vous devez définir un booléen variable d'instance de
indiquent que vous êtes maintenant à l'intérieur d'un
person
élément et définir les attributs personnesà l'intérieur de la
endElement
méthode. Le personnage de contenu est transmis à l'characters
méthode et doit être ajouté à un tampon depuis l'analyseur estdroit de faire appel à cette méthode plusieurs fois.
OriginalL'auteur Jörn Horstmann
Utiliser ce code : Remplacer de début et de Fin des Éléments et de Déclarer la Personne objet de classe dans le top...
Un doute ou une suggestion ?, Vous êtes les bienvenues...
OriginalL'auteur Mohamed Hisham Ibn Hanifa