Comment obtenir la valeur de l'élément de XML en utilisant SAX parser en startElement?
Est-il possible d'obtenir le contenu d'un élément à partir d'un fichier XML dans startElement
fonction qui est la fonction override de la SAX gestionnaire?
Ci-dessous le cahier des charges.
1) fichier XML
<employees>
<employee id="111">
<firstName>Rakesh</firstName>
<lastName>Mishra</lastName>
<location>Bangalore</location>
</employee>
<employee id="112">
<firstName>John</firstName>
<lastName>Davis</lastName>
<location>Chennai</location>
</employee>
<employee id="113">
<firstName>Rajesh</firstName>
<lastName>Sharma</lastName>
<location>Pune</location>
</employee>
</employees>
2) startElement
fonction
@Override
public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException {
.......code in here..........
}
3) résultat Attendu
element name : employee
attribute name : id
attribute value: 111
firstName : Rakesh
lastName : Mishra
location : Bangalore
element name : employee
attribute name : id
attribute value: 112
firstName : John
lastName : Davis
location : Chennai
element name : employee
attribute name : id
attribute value: 113
firstName : Rajesh
lastName : Sharma
location : Pune
mkyong.com/java/how-to-read-xml-file-in-java-sax-parser
je vous remercie. J'ai déjà vérifier celui-ci. Si je dis que je veux qu'écrire du code dans startElement fonction, est-il possible?
Vous obtenez seulement les attributs de startElement. Toutes les valeurs de texte que vous obtenez dans caractères. Vous devez utiliser startElement pour détecter lorsqu'un élément a commencé. A l'intérieur vous pouvez définir des indicateurs qui vous permet de vérifier dans le caractères de la méthode. Savoir qui est l'élément actif à l'intérieur de caractères, vous pouvez obtenir sa valeur. Vous devez n'oubliez pas de réinitialiser les drapeaux dans endElement.
À l'aide de startElement() et l'autre méthode est la seule façon que vous accédez à des données en XML. je ne pense pas qu'il est possible d'écrire chaque chose en startElement. Analyseur SAX est différent de celui de DOM, car il ne prend pas en charge complète XML en mémoire et de lecture de document xml de manière séquentielle. startElement() : Chaque fois qu'un analyseur SAX obtient une balise d'ouverture " <", il appelle startElement(). endElement(): Chaque fois qu'un analyseur SAX obtient une balise de fermeture " >", il appelle endElement(). personnage(): Chaque fois qu'un analyseur SAX devient une simple chaîne de caractères, il appelle de caractères() la méthode et le xml selon le code écrit en startElement().
je vous remercie pour votre facile de comprendre le concept. que diriez-vous cette option? Je veux un jeu de tag, attName, attValue, et de l'étiquette de valeur. La raison pour laquelle je pose cette question car j'ai besoin de l'utiliser dans un autre thread.
je vous remercie. J'ai déjà vérifier celui-ci. Si je dis que je veux qu'écrire du code dans startElement fonction, est-il possible?
Vous obtenez seulement les attributs de startElement. Toutes les valeurs de texte que vous obtenez dans caractères. Vous devez utiliser startElement pour détecter lorsqu'un élément a commencé. A l'intérieur vous pouvez définir des indicateurs qui vous permet de vérifier dans le caractères de la méthode. Savoir qui est l'élément actif à l'intérieur de caractères, vous pouvez obtenir sa valeur. Vous devez n'oubliez pas de réinitialiser les drapeaux dans endElement.
À l'aide de startElement() et l'autre méthode est la seule façon que vous accédez à des données en XML. je ne pense pas qu'il est possible d'écrire chaque chose en startElement. Analyseur SAX est différent de celui de DOM, car il ne prend pas en charge complète XML en mémoire et de lecture de document xml de manière séquentielle. startElement() : Chaque fois qu'un analyseur SAX obtient une balise d'ouverture " <", il appelle startElement(). endElement(): Chaque fois qu'un analyseur SAX obtient une balise de fermeture " >", il appelle endElement(). personnage(): Chaque fois qu'un analyseur SAX devient une simple chaîne de caractères, il appelle de caractères() la méthode et le xml selon le code écrit en startElement().
je vous remercie pour votre facile de comprendre le concept. que diriez-vous cette option? Je veux un jeu de tag, attName, attValue, et de l'étiquette de valeur. La raison pour laquelle je pose cette question car j'ai besoin de l'utiliser dans un autre thread.
OriginalL'auteur sakura | 2014-06-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez obtenir de l'élément nom dans
startElement
etendElement
. Vous pouvez également obtenir des attributs dansstartElement
. Les valeurs que vous devriez obtenir danscharacters
.Ici est un exemple de base sur la façon d'obtenir la valeur d'un élément à l'aide d'un
ContentHandler
:Si vous avez un exemple simple, le paramètre booléen drapeaux pour chaque balise est OK. Si vous avez un scénario complexe, vous pouvez choisir de stocker les indicateurs dans une carte à l'aide des noms d'éléments, comme des clés, ou même de créer un ou plusieurs
Employee
classes mappées à votre XML, les instancier chaque fois<employee>
est trouvé dansstartElement
, remplir ses propriétés, et l'ajouter à une Collection enendElement
.Ici est un
ContentHandler
exemple qui fonctionne avec votre fichier d'exemple. J'espère que cela vous aide à démarrer:Comme indiqué ci-dessus, dans le
startElement
méthode, vous pouvez lire le nom de la balise (qName
) et de tous les attributs que vous pouvez lire à partir de laatts
variable (atts.getQName(i)
etatts.getValue(i)
), mais à lire l'étiquette de la valeur de texte, vous devez utiliser lecharacters
méthode et utiliser des indicateurs comme illustré ci-dessus. Si vous exécutez l'exemple ci-dessus, vous devriez obtenir le résultat que vous attendez.Comment sur les différentes fichier xml? Devons-nous mettre en œuvre d'autres codes? Comme je l'ai remarqué, votre code d'utilisation de nom de balise dans la condition. Si nous ne connaissons pas le seul, que devons-nous faire?
SAX est prévu pour le séquentiel de la lecture d'un fichier XML, ce qui est nécessaire quand vous avez besoin d'extraire des bribes d'informations à partir de fichiers volumineux. Si vous souhaitez obtenir toutes les données à la fois simplement à l'aide de méthodes pour extraire les données que vous le souhaitez, vous préférerez peut-être utiliser un modèle d'objet de l'API, telles que DOM ou XPath.
Veuillez noter que "les parseurs SAX peut retourner l'ensemble des données de caractère dans un seul morceau, ou ils peuvent découper en plusieurs morceaux". Ainsi, vous devez accumuler des données.
OriginalL'auteur helderdarocha