Téléchargement
illégal
Posez votre question Signaler

Extraire des balises xml d'un fichier xml

MarENSI 6Messages postés 24 mars 2010Date d'inscription 25 mars 2010Dernière intervention - Dernière réponse le 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.
Lire la suite 

Extraire des balises xml d'un fichier xml »

13 réponses
Réponse
+1
moins plus
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));
}
}
Ajouter un commentaire
Réponse
+0
moins plus
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:
http://sebsauvage.net/python/snyppets/#parse_rss
Ajouter un commentaire
Réponse
+0
moins plus
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.
sebsauvage- 24 mars 2010 à 14:19
je programme en JAVA.

DOM et SAX existent en Java.

Tu trouvera des exemples là:
http://cynober.developpez.com/tutoriel/java/xml/jdom/
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Réponse
+0
moins plus
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.
MarENSI- 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.
sebsauvage- 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.
Ajouter un commentaire
Réponse
+0
moins plus
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?
Ajouter un commentaire
Réponse
+0
moins plus
Si tu peux lire le contenu des balises, tu peux les extraire, non ?
Ajouter un commentaire
Réponse
+0
moins plus
Je ne vois pas du tout comment faire :s

Un petit exemple sera le bienvenu et merci d'avance.
Ajouter un commentaire
Réponse
+0
moins plus
Tu peux créer une arboresence simple:
http://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.
http://cynober.developpez.com/tutoriel/java/xml/jdom/#L3.2
Ajouter un commentaire
Réponse
+0
moins plus
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.
Ajouter un commentaire
Ce document intitulé « Extraire des balises xml d'un fichier xml » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Dossier à la une
Passage au tout numérique : quel coût pour les particuliers ?