IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Format d'échange (XML, JSON...) Java Discussion :

Supprimer les namespaces dans un fichier XML [StAX]


Sujet :

Format d'échange (XML, JSON...) Java

  1. #1
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 177
    Par défaut Supprimer les namespaces dans un fichier XML
    Bonjour à tous,
    j'utilise Stax pour parser un fichier XML( le but est de deviser un grand fichier XML en plusieurs petits fichiers XML) voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
        private void split(String xmlResource, String condition) throws Exception {
        	XMLEventFactory xef = XMLEventFactory.newFactory();
        	XMLInputFactory xif = XMLInputFactory.newInstance();        
        	XMLEventReader xer = xif.createXMLEventReader(new FileReader(xmlResource));         	 
        	StartDocument startDocument = xef.createStartDocument();
     
        	while(xer.hasNext() && !xer.peek().isEndDocument()) {
        		boolean metCondition;
        		XMLEvent xmlEvent = xer.nextTag();
        		if(!xmlEvent.isStartElement()) {
        			break;
        		}
     
        		StartElement breakStartElement = xmlEvent.asStartElement();
        		List<XMLEvent> cachedXMLEvents = new ArrayList<XMLEvent>();
        		List<String> cachedXMLEvent = new ArrayList<String>();
     
        		if(null == condition) {
        			cachedXMLEvents.add(breakStartElement);
        			metCondition = true;
        		} else {
        			cachedXMLEvents.add(breakStartElement);
        			xmlEvent = xer.nextEvent();
        			metCondition = false;
        			while(!(xmlEvent.isEndElement() && xmlEvent.asEndElement().getName().equals(breakStartElement.getName()))) {
        				cachedXMLEvents.add(xmlEvent);
        				cachedXMLEvent.add(xmlEvent.toString());
        				if(xmlEvent.isStartElement() && xmlEvent.asStartElement().getName().getLocalPart().equals(condition)) {
        					metCondition = true;
        					break;
        				}
        				xmlEvent = xer.nextEvent();
        			}
        		}
        		cachedXMLEvents.add(xmlEvent);
        		metCondition = true;            
     
        		if(metCondition) {
        			// Create a file for the fragment, the name is derived from the value of the id attribute
        			FileWriter fileWriter = new FileWriter("c:/test.xml");
        			DocumentBuilderFactory dbFactory_ = DocumentBuilderFactory.newInstance();
        			dbFactory_.setNamespaceAware(false);
        			Document doc_;
        			DocumentBuilder dBuilder = dbFactory_.newDocumentBuilder();
     
        			String  temp=startDocument.toString();
     
        			// Write the XMLEvents that were cached while when we were
        			// checking the fragment to see if it matched our criteria.
        			for(XMLEvent cachedEvent : cachedXMLEvents) {
        				temp+=cachedEvent.toString();
     
        			}
     
        		}
        	}
        }
    le traitement fonctionne correctement, mais à la fin dans la variable "temp" je me trouve avec un fichier xml avec des namespaces dans tous les élements, exemple:
    <?xml version="1.0" encoding='UTF-8'?>
    <['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::staff>
    <['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::firstname>yong</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::firstname>
    <['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::lastname>mook kim</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::lastname>
    <['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::nickname>mkyong</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::nickname>
    <['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::salary>100000</['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::salary>
    </['http://www.tibco.com/schemas/splitter/Resources/Schema.xsd']::staff>
    comment faire pour supprimer les namespaces ? je ne veux pas écrire le résultat dans un fichier en utilisant XMLEventWriter, car je souhaite envoyer le String via JMS.

    merci de votre aide.

  2. #2
    Modérateur
    Avatar de paissad
    Homme Profil pro
    Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Inscrit en
    Avril 2006
    Messages
    1 043
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur de développement (Java/JEE/Eclipse RCP,EMF & webMethods)
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2006
    Messages : 1 043
    Par défaut
    Bonjour,
    je ne pense pas que cela soit possible, ... car il faut savoir que le namespace fait partie du nom du tag/balise. Donc si tu décides de le supprimer, c'est comme si tu renommais la balise, ... ça va à l'encontre des spécifications.
    P
    Nous n'héritons pas de la terre de nos parents, nous l'empruntons à nos enfants.
    Le chat du site est aussi ici pour aider. Ne pas hésiter à visiter !

  3. #3
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 177
    Par défaut
    Bonjour paissad et merci de la réponse,
    en effet, je dois envoyer le fichier XML crée via JMS, pour qu'il soit utiliser dans un autre traitement.
    j'ai essayé de lire le fichier crée avec JDOM mais il n'a pas l'air de vouloir aimer le format , je reçois une exception:
    The markup in the document preceding the root element must be well-formed.
    A part les namespaces je ne vois ce qui bloque dans le document.

    Merci de votre aide.

  4. #4
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    Citation Envoyé par passion_info Voir le message
    A part les namespaces je ne vois ce qui bloque dans le document.
    Ç'aurait pu être intéressant de le montrer, si tu voulais un avis.

    Mais bon, c'est pas de parser avec JDOM qui résoudra un problème : enlever les namespaces c'est renommer les balises. Et c'est pas quelque chose de prévu pour être simple.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre confirmé
    Inscrit en
    Février 2005
    Messages
    177
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 177
    Par défaut
    merci de la réponse,
    j'ai trouvé, il suffit de positionner la propriété de XMLInputFactory :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xif.setProperty("javax.xml.stream.isNamespaceAware", Boolean.FALSE);

    Merci à tous.

  6. #6
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 582
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 582
    Par défaut
    C'est pas vraiment la même chose, mais j'imagine qu'on peut s'en servir comme ça -_-°.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Comment supprimer du texte dans un fichier XML
    Par sheira dans le forum Langage
    Réponses: 12
    Dernier message: 29/12/2010, 15h47
  2. Ajouter des namespace dans un fichier XML
    Par Septembre84 dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 19/05/2008, 12h20
  3. supprimer les donnés dans un fichier en vb
    Par rokirakat dans le forum VB.NET
    Réponses: 3
    Dernier message: 17/02/2008, 21h26
  4. [](VB) Récupérer les données dans un fichier .xml
    Par Furius dans le forum VBScript
    Réponses: 4
    Dernier message: 02/10/2005, 20h39
  5. Supprimer les guillemets dans un fichier après écriture
    Par soulryo dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 01/03/2005, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo