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 :

Parser String to XML : [#document: null] [DOM]


Sujet :

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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut Parser String to XML : [#document: null]
    bonjour, j'essaie actuellement de créer un document XML à partir d'une String.

    pour ce faire j'ai ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    Document document = parser.parse(new InputSource(new StringReader(chaine)));
    Ce code me renvoie donc document null.
    Donc lorsque je tente d'accéder aux différents noeuds, j'ai évidemment des erreurs puisque le document est null.
    Or lorsque je crée un fichier XML à partir de document, aucun problème et la je comprend plus.

    Ma question pourquoi mon code renvoie un document null??
    Si quelqu'un a un bout de code adéquate ca ferait plaisir!

    Merci en attente de vos réponses!

  2. #2
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    La syntaxe est correcte. c'est la chaine xml qui ne doit pas être valide.
    Poste la chaine xml si possible.

  3. #3
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    Code xml : 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
     
    <message>
    <elements>
    <id>9121811</id>
    <statut></statut>
    <dateDebut>2009-03-19 00:00:00</dateDebut>
    <dateFin>2009-03-24 00:00:00</dateFin>
    </elements>
    <elements>
    <id>9270474</id>
    <statut></statut>
    <dateDebut>2009-03-19 00:00:00</dateDebut>
    <dateFin>2009-03-20 00:00:00</dateFin>
    </elements>
    <composants>
    <id>9121811</id>
    <type>UCD</type>
    <code>9121811</code>
    </composants>
    <composants>
    <id>9270474</id>
    <type>UCD</type>
    <code>9270474</code>
    </composants>
    <renseignements>
    <code>AM</code>
    <valeur>N18</valeur>
    </renseignements>
    </message>

    après j'ai essayé en ajoutant <?xml version="1.0" encoding="UTF-8"?> au début de ma chaine mais ca ne change rien

  4. #4
    Expert confirmé
    Avatar de djo.mos
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    4 666
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 4 666
    Par défaut
    Salut,
    J'ai testé avec le code et l'XML que tu montres, et ça marche sans problème (i.e. l'xml est bien chargé dans un dom).

    Exemple :
    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
    public static void main(String[] args) throws Exception {
    		String chaine = "<message>" + "<elements>" + "<id>9121811</id>"
    				+ "<statut></statut>"
    				+ "<dateDebut>2009-03-19 00:00:00</dateDebut>"
    				+ "<dateFin>2009-03-24 00:00:00</dateFin>" + "</elements>"
    				+ "<elements>" + "<id>9270474</id>" + "<statut></statut>"
    				+ "<dateDebut>2009-03-19 00:00:00</dateDebut>"
    				+ "<dateFin>2009-03-20 00:00:00</dateFin>" + "</elements>"
    				+ "<composants>" + "<id>9121811</id>" + "<type>UCD</type>"
    				+ "<code>9121811</code>" + "</composants>" + "<composants>"
    				+ "<id>9270474</id>" + "<type>UCD</type>"
    				+ "<code>9270474</code>" + "</composants>" + "<renseignements>"
    				+ "<code>AM</code>" + "<valeur>N18</valeur>"
    				+ "</renseignements>" + "</message>";
    		DocumentBuilder parser = DocumentBuilderFactory.newInstance()
    				.newDocumentBuilder();
    		Document document = parser.parse(new InputSource(new StringReader(
    				chaine)));
    		System.out.println(document.getDocumentElement().getChildNodes().getLength());
     
    	}
    affiche 5.

  5. #5
    Membre expérimenté Avatar de jiddou
    Inscrit en
    Août 2007
    Messages
    247
    Détails du profil
    Informations forums :
    Inscription : Août 2007
    Messages : 247
    Par défaut
    effectivement la chaine est valide. essaies de poster la classe qui parse le fichier avec les import surtout.

  6. #6
    Membre confirmé Avatar de lextaz33
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2008
    Messages
    169
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2008
    Messages : 169
    Par défaut
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
     
    package com.shs.xml;
     
    import java.io.IOException;
    import java.io.StringReader;
    import java.text.ParseException;
    import java.text.SimpleDateFormat;
    import java.util.List;
     
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.soap.SOAPException;
     
    import org.apache.commons.beanutils.ConvertUtils;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.w3c.dom.Document;
    import org.w3c.dom.NodeList;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
     
     
     
    public class ServiceBPHcreateXML {
     
    	protected static Log log = LogFactory.getLog(ServiceBPHcreateXML.class);
     
     
     
    	public static Document createXML(String chaine) throws IOException, SAXException, ParserConfigurationException{
     
     
    		DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    		Document document = parser.parse(new InputSource(new StringReader(chaine)));
     
     
    		return document;
    	}
     
    	@SuppressWarnings({ "null", "unchecked" })
    	public static List xmlToBean(Document document) throws ParseException{
     
    		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");	
    		List<Element> elements = null;
    		List<Composant> composants = null;
    		List<Renseignement> renseignements = null;
     
    //		Document document = null;
    //		try {
    //			document = XMLUtils.parse(ParameterUtils.getInstance().getGenerationCompteRendu() + "Test" + ".xml", true, new XMLErrorHandler());
    //		} catch (UtilException e) {
    //			e.printStackTrace();
    //		}
     
    		// récupération des Elements messages contenus dans le fichier XML :
    		NodeList listMessages = document.getElementsByTagName("message");
    		for (int i = 0; i < listMessages.getLength(); i++) {
    			// Pour chaque message, on récupère ses fils et on les traite :
    			NodeList listElements = listMessages.item(i).getChildNodes();
    			for (int ii = 0; ii < listElements.getLength(); ii++) {
     
    				if (listElements.item(ii).hasAttributes() || listElements.item(ii).hasChildNodes()) {					
     
    					NodeList ordonnanceChilds = listElements.item(ii).getChildNodes();
    					for (int iii = 0; iii < ordonnanceChilds.getLength(); iii++) {
     
    						if (ordonnanceChilds.item(iii).getNodeName().equalsIgnoreCase("elements")) {
    							// Récupération des données elements
    					        NodeList elementsChilds = ordonnanceChilds.item(iii).getChildNodes();
    					        String id=null, statut=null, dateDebut=null, dateFin=null;
     
    					        for (int iv = 0; iv < elementsChilds.getLength(); iv++) {
    					            if (elementsChilds.item(iv).hasAttributes()) {
    					                if (elementsChilds.item(iv).getLocalName().equalsIgnoreCase("id")) {
    					                    id = XMLUtils.getTextInNode(elementsChilds.item(iv));
    					                } else if (elementsChilds.item(iv).getLocalName().equalsIgnoreCase("statut")) {
    					                    statut = XMLUtils.getTextInNode(elementsChilds.item(iv));
    					                } else if (elementsChilds.item(iv).getLocalName().equalsIgnoreCase("dateDebut")) {
    					                    dateDebut = XMLUtils.getTextInNode(elementsChilds.item(iv));
    					                } else if (elementsChilds.item(iv).getLocalName().equalsIgnoreCase("dateFin")) {
    					                    dateFin = XMLUtils.getTextInNode(elementsChilds.item(iv));
    					                } 
    					                Element element = new Element();					                
    					                element.setId(id);
    					                element.setStatut(statut);
    					                element.setDateDebut(sdf.parse(dateDebut));
    					                element.setDateFin(sdf.parse(dateFin));
     
    					                elements.add(element);
    					            }
    					        }
     
    						}else if (ordonnanceChilds.item(iii).getNodeName().equalsIgnoreCase("composants")) {
    							// Récupération des données composants
    					        NodeList composantsChilds = ordonnanceChilds.item(iii).getChildNodes();
    					        String id=null, type=null, code=null;
     
    					        for (int iv = 0; iv < composantsChilds.getLength(); iv++) {
    					            if (composantsChilds.item(iv).hasAttributes()) {
    					                if (composantsChilds.item(iv).getLocalName().equalsIgnoreCase("id")) {
    					                    id = XMLUtils.getTextInNode(composantsChilds.item(iv));
    					                } else if (composantsChilds.item(iv).getLocalName().equalsIgnoreCase("type")) {
    					                    type = XMLUtils.getTextInNode(composantsChilds.item(iv));
    					                } else if (composantsChilds.item(iv).getLocalName().equalsIgnoreCase("code")) {
    					                    code = XMLUtils.getTextInNode(composantsChilds.item(iv));
    					                }
     
    					                Composant composant = new Composant();					                
    					                composant.setId(id);
    					                composant.setType(type);
    					                composant.setCode(code);					               
     
    					                composants.add(composant);
    					            }
    					        }
     
    						} else if (ordonnanceChilds.item(iii).getNodeName().equalsIgnoreCase("renseignements")) {
     
    							// Récupération des données renseignements
    					        NodeList renseignementsChilds = ordonnanceChilds.item(iii).getChildNodes();
    					        String code=null, valeur=null;
     
    					        for (int iv = 0; iv < renseignementsChilds.getLength(); iv++) {
    					            if (renseignementsChilds.item(iv).hasAttributes()) {
    					                if (renseignementsChilds.item(iv).getLocalName().equalsIgnoreCase("code")) {
    					                    code = XMLUtils.getTextInNode(renseignementsChilds.item(iv));
    					                } else if (renseignementsChilds.item(iv).getLocalName().equalsIgnoreCase("valeur")) {
    					                    valeur = XMLUtils.getTextInNode(renseignementsChilds.item(iv));
    					                } 
     
    					                Renseignement renseignement = new Renseignement();					                
    					                renseignement.setCode(code);
    					                renseignement.setValeur(valeur);					               
     
    					                renseignements.add(renseignement);
    					            }
    					        }
    						}
     
    					}
    				}               
    			}
    		}
     
    		List<Object> object = null;
    		object.add(elements);
    		object.add(composants);
    		object.add(renseignements);
    		return object;
    	}
    }
    Je vous met l'essentiel, les imports, la classe et les méthodes de parsing de ma string et la méthode xmlToBean qui veut dire ce qu'elle veut dire!

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

Discussions similaires

  1. Parser String xml
    Par tlili_info dans le forum Langage
    Réponses: 15
    Dernier message: 18/05/2011, 01h28
  2. Parser une chaine String en XML
    Par robocop2776 dans le forum Format d'échange (XML, JSON...)
    Réponses: 4
    Dernier message: 01/05/2011, 17h59
  3. [DOM] parsing xml - Document null
    Par burhud dans le forum Format d'échange (XML, JSON...)
    Réponses: 5
    Dernier message: 23/08/2007, 11h50
  4. je souhaite parser un fichier xml en tableau de string/java
    Par l'indien dans le forum XML/XSL et SOAP
    Réponses: 3
    Dernier message: 26/07/2007, 12h23
  5. [DOM][XML] Parser et tester un document XML
    Par ninox_ dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 24/04/2007, 14h03

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