Extraire des balises xml d'un fichier xml

Fermé
MarENSI Messages postés 7 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 25 mars 2010 - 24 mars 2010 à 13:40
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 - 25 mars 2010 à 11:56
Bonjour,

Je suis débutante en programmation et je veux extraire des balises xml d'un fichier xml.

Est ce que quelqu'un peut m'aider avec un exemple svp.

A voir également:

10 réponses

sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mars 2010 à 15:18
Tu peux créer une arboresence simple:
https://cynober.developpez.com/tutoriel/java/xml/jdom/#L2.2

et y insérer les données que tu as lues des balises du fichier xml en entrée.
https://cynober.developpez.com/tutoriel/java/xml/jdom/#L3.2
3
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
25 mars 2010 à 11:56
Je n'ai pas de compilateur Java sous la main, désolé.
Je t'ai donné les pistes, mais je n'irai pas jusqu'au code Java.
2
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mars 2010 à 13:42
En gros, il y a 2 grandes familles de librairies pour "lire" (parser) de l'XML: DOM et SAX.

Essaie avec DOM pour commencer.

Exemple en Python:
https://sebsauvage.net/python/snyppets/#parse_rss
1
MarENSI Messages postés 7 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 25 mars 2010 5
24 mars 2010 à 13:52
Merci beaucoup pour ta réponse mais en fait, je programme en JAVA.

En plus, j'ai utilisé DOM et il me donne le contenu des balises pas les balises entières, je ne sais pas si c'est possible ou pas.

Pour etre plus précise, si mon fichier d'entrée est:
<A> <B>bbb</B>
<C>ccc</C>
</A>

alors mon fichier de sortie serait:
<A>
<B>bbb</B>
</A>

Merci d'avance pour votre aide.
1
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mars 2010 à 14:19
je programme en JAVA.

DOM et SAX existent en Java.

Tu trouvera des exemples là:
https://cynober.developpez.com/tutoriel/java/xml/jdom/
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
MarENSI Messages postés 7 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 25 mars 2010 5
24 mars 2010 à 14:40
Merci beaucoup pour votre réponse.

En effet, pour ce document, DOM retourne comme résultat le contenu des balises pas les balises.

Est ce que vous pouvez m'aider svp, c'est urgent.
1
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mars 2010 à 14:42
Dans le lien que j'ai donné, tu as vu la méthode "removeChild" dans la section "Modifier une arborescence JDOM" ?

Je pense que c'est ce que tu cherches.
1
MarENSI Messages postés 7 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 25 mars 2010 5
24 mars 2010 à 15:01
Je ne vois pas comment "removeChild" peut répondre à mon besoin,merci de me donner s'il vous plait un petit exemple illustratif.
0
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mars 2010 à 15:09
Dans ton exemple, au début, tu sembles vouloir supprimer la balise C.
removeChild() permet de supprimer des branches d'un arbre XML, justement.
0
MarENSI Messages postés 7 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 25 mars 2010 5
24 mars 2010 à 15:13
Aah, non, c'est pas la suppression que je veux faire, c'est plutot l'extraction d'une ou plusieurs balises suivant un critère (par exemple le nom de la balise), voila.

Est ce qu'il y a une idée svp?
1
sebsauvage Messages postés 32893 Date d'inscription mercredi 29 août 2001 Statut Modérateur Dernière intervention 21 octobre 2019 15 654
24 mars 2010 à 15:14
Si tu peux lire le contenu des balises, tu peux les extraire, non ?
1
MarENSI Messages postés 7 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 25 mars 2010 5
24 mars 2010 à 15:16
Je ne vois pas du tout comment faire :s

Un petit exemple sera le bienvenu et merci d'avance.
1
MarENSI Messages postés 7 Date d'inscription mercredi 24 mars 2010 Statut Membre Dernière intervention 25 mars 2010 5
25 mars 2010 à 11:33
Bonjour,

J'ai un petit code qui demande la balise à extraire du fichier xml en entrée et donne en retour son contenu, mais il ne retourne que la première balise, est ce que quelqu'un pourrait m'aider à le corriger svp.

Merci d'avance.

/* -*-Java-*- (encoding:iso8859-1)
* ########################################################################
*
* FILE: "XML.java"
* Author: Frédéric Boulanger
* E-mail: <Frederic.Boulanger@supelec.fr>
* mail: Supélec - Département Informatique
* 3 rue Joliot-Curie, 91192 Gif-sur-Yvette, France
* www: <http://wwwsi.supelec.fr/fb/>
*
* History
*
* modified by rev reason
* ---------- --- --- -----------
* 2006-11-24 FBO 1.0 original
*
* ########################################################################
*/
//Représente un fichier sur disque
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;

import org.w3c.dom.NodeList;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class Exemple {
public static void main(String[] args) {
// Notre fichier d'exemple XML

File f = new File("exemple.xml");

SAXParser p = null;
// On crée maintenant un parseur SAX pour relire notre fichier
try {
p = SAXParserFactory.newInstance().newSAXParser();
// On active les namespaces, sinon, on ne récupèrera pas le nom
// des éléments dans les méthodes start/endElement
p.getXMLReader().setFeature("http://xml.org/sax/features/namespaces", true);
} catch (ParserConfigurationException pce) {
System.err.println("Impossible de créer le parseur SAX.");
System.err.println(pce);
System.exit(1);
} catch (SAXException saxe) {
System.err.println("Erreur SAX.");
System.err.println(saxe);
System.exit(1);
}
// On demande maintenant au parseur d'analyser le fichier en signalant
// les événements à une instance de MonGestionnaire.
try {
p.parse(f, new MonGestionnaire());
} catch (SAXException saxe) {
System.err.println("Erreur SAX.");
System.err.println(saxe);
System.exit(1);
} catch (IOException ioe) {
System.err.println("Erreur de lecture du fichier.");
System.err.println(ioe);
System.exit(1);
}
}
}
/**
* Notre gestionnaire d'événements SAX
*/
class MonGestionnaire extends DefaultHandler {
/** Appelée avant toutes les autres méthodes, au début du document. */
// public void startDocument() {
// System.out.println("--Début du document--");
// }
/** Appelée après toutes les autres méthodes, à la fin du document. */
// public void endDocument() {
// System.out.println();
// System.out.println("--Fin du document--");
// }
/**
* Appelée à chaque fois qu'un élément est rencontré.
* - uri est l'URI de l'espace de nom auquel appartient l'élément
* - localName est le nom de l'élément (sans préfixe d'espace de nom)
* - qName est le nom qualifié de l'élément (avec préfixe d'espace de nom)
* - attributes est la liste des attributs de l'élément.
* @throws IOException
*/
public void startElement(String uri, String localName,
String qName, Attributes attributes) {
BufferedReader keyboard=new BufferedReader(new InputStreamReader(System.in));
String line = "";
System.out.print("donner la balise");
try{
line=keyboard.readLine();
}catch(IOException e){
System.out.println("err");
}
//int j=0;

if(localName.equals(line)){

System.out.print("<" + localName);

for (int i = 0; i < attributes.getLength(); i++) {
System.out.print(" " + attributes.getLocalName(i)
+ "=\"" + attributes.getValue(i) + "\"");
}
System.out.print(">");
}
}
/** Appelée à chaque fois qu'une fin d'élément est rencontrée. */
public void endElement(String uri, String localName, String qName) {

System.out.print("</" + localName + ">");
}

/** Fournit les données trouvées à l'intérieur d'un élément. */
public void characters(char[] ch, int start, int length) {
System.out.print(new String(ch, start, length));
}
/** Fournit des espaces ignorables trouvés à l'intérieur d'un élément. */
public void ignorableWhitespace(char[] ch, int start, int length) {
for(int i = 0; i < length; i++) {
System.out.print('_');
}
// System.out.print(new String(ch, start, length));
}
}
0