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

XML/XSL et SOAP Discussion :

Récupérer infos dans XML


Sujet :

XML/XSL et SOAP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Par défaut Récupérer infos dans XML
    Bonjour,
    J'ai plusieurs xml qui comprend plusieurs TestLogItem comme ceci :

    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
     
    <TestLogItem id="2" pid="-1" nety="False">
        <Type>F6051715.gif</Type>
        <Message>
           <![CDATA[An error]]>
        </Message>
        <Time>12/5/2005 12:57:20 PM</Time>
        <Priority>
           <![CDATA[Normal]]>
        </Priority>
        <Link></Link>
        <HasPicture/>
        <TypeDescription>
           <![CDATA[Error]]>
        </TypeDescription>
        <Picture/>
        <Remarks>
           <![CDATA[]]>
        </Remarks>
    </TestLogItem>
    Ce que je veux récuperer dans ces xml, c'est seulement les TestLogItem qui ont comme valeur de TypeDescription "Error" comme ci-dessus (ou rechercher dans la balise Message, peut importe).
    Ensuite, j'aimerais rassembler toutes ces erreurs dans un seul et même fichier (mais je ne sais pas quelle format au final... xml ou html ou autre ?).

    Est-ce que c'est possible ? Est-il possible de faire ce traitement avec un batch ?

    Merci beaucoup d'avance !

  2. #2
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    Tu devrais essayer d'effectuer une transformation XSLT de ton document en sélectionnant les noeuds à transformer par une requête XPath qui pourrait être:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //TestLogItem[TypeDescription="Error"]
    Les tutoriels sont disponibles sur developpez.com

    ERE

  3. #3
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Par défaut
    Merci ça m'a bien avancé, mais cependant je bloque sur ce point :
    Je charge bien mon fichier et je créer le début d'un autre fichier XML mais le problème c'est que je ne sais pas comment rajouter seulement les nœuds que je récupère (ceux avec Error) dans mon autre fichier XML et ensuite sauver celui-ci.

    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
     
    XmlTextWriter Xtw = null;
    XmlDocument XmlDoc = null;
    XPathNavigator Navigator = null;
     XPathNodeIterator Nodes = null;
     
    // Chargement du/des fichier(s) à examiner
    XmlDoc = new XmlDocument();
    XmlDoc.Load("~\\TestLog.xml");
    Navigator = XmlDoc.CreateNavigator();
    string ExpXPath = "//TestLogItem[TypeDescription = 'Error']";
    Nodes = Navigator.Select(Navigator.Compile(ExpXPath));
     
    // Création du nouveau XML et insertion des noeuds contenant des Error
    Xtw = new XmlTextWriter("Test.xml", System.Text.Encoding.UTF8);
    Xtw.Formatting = Formatting.Indented;
    Xtw.WriteStartDocument();
    Xtw.WriteStartElement("TestLog");
     
    if (Nodes.Count != 0)
    {
         Nodes.MoveNext();
         Nodes.Current.MoveToFirstChild();
     
         // La je ne sais pas quoi mettre !! :(
     
         //XmlDoc.Save("~\\Test.xml"); // et la, ce n'est pas le xmldoc que je dois sauver mes justes les noeuds récupérés !
         Xtw.WriteEndElement();
         Xtw.Flush();
         Xtw.Close();
     
         return true;
    }
    else
    {
         return false;
    }
    Si je ne suis pas assez claire, dites-le moi et j'essayerais d'être plus clair !
    Merci beaucoup d'avance !

  4. #4
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Salut,

    Pourquoi n'écris tu pas une petite transformation XSLT et ensuite ton code qui effectue la transformation de ton flux d'entrée ? Tu peux par exemple regarder ce tutoriel d'inityiation et la FAQ.

    Cela à l'avantage dans ton cas (relativement simple) de ne pas avoir à coder cette transformation en dur.

    ERE

  5. #5
    Membre averti
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mars 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 37
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mars 2009
    Messages : 43
    Par défaut
    En effet, c'est beaucoup plus simple. Pour l'instant, j'arrive à afficher ça dans le navigateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Nom du scenario avec date :
     
        * Error : EXI-GESDOS-0001_Connexion:Suppression login avec la touche Echap : NOK - La touche Echap ne vide pas le login - 27/05/2009 13:00:41
        * Error : La connexion a échouée, le portail n'est pas chargé. - 27/05/2009 13:03:15
    ...
    En fait, mon xml se trouve dans un sous-dossier de plusieurs dossiers, et j'aimerais récupérer ce nom de dossier pour mettre à la place de "Nom du scenario avec date".

    Au final, il faudrait que ce résultat soit enregistrer dans un autre fichier qui regrouperait toutes les erreurs de chaque fichier xml qui se trouvent dans des dossiers spécifiques. Comment procéder ?

    Code de mon xslt pour aider peut-être :
    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
     
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
     
    <xsl:output method="html" encoding="ISO-8859-1" doctype-public="-//W3C//DTD HTML 4.01//EN" doctype-system="http://www.w3.org/TR/html4/strict.dtd" indent="yes" />
     
    <xsl:template match="TestLog">
      <html><body>
        <p>Nom du scenario avec date :</p>
        <ul>
          <xsl:apply-templates select="//TestLogItem[TypeDescription = 'Error']" />
        </ul>
      </body></html>
    </xsl:template>
     
    <xsl:template match="TestLogItem">
      <li>
        <xsl:value-of select="TypeDescription" />
        <xsl:text> : </xsl:text>
        <xsl:value-of select="Message" />
    	<xsl:text> - </xsl:text>
    	<xsl:value-of select="Time" />
      </li>
    </xsl:template>
     
    </xsl:stylesheet>

  6. #6
    Membre Expert
    Avatar de emmanuel.remy
    Inscrit en
    Novembre 2005
    Messages
    2 855
    Détails du profil
    Informations personnelles :
    Âge : 57

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 855
    Par défaut
    Je ne sais pas comment tu fais ta transformations (logiciel...) mais tu peux dans tous les cas passer des variables qui seront injectées dans ton document XSLT via les éléments <xsl:variable ... >

    Pour le regroupement c'est une simple concaténation de fichiers textes ce qui se fait avec n'importe quel langage.

    ERE

Discussions similaires

  1. Récupérer infos dans XML
    Par Zanthia dans le forum Scripts/Batch
    Réponses: 11
    Dernier message: 18/06/2009, 15h10
  2. Récupérer infos dans XML
    Par Zanthia dans le forum C#
    Réponses: 4
    Dernier message: 27/05/2009, 16h38
  3. [XML] [cURL] Récupérer infos dans XML
    Par zefox dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 20/11/2007, 11h33
  4. [AJAX] Récupérer infos dans fichier XML
    Par Dia_FR dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 02/12/2006, 15h34
  5. Récupérer infos dans fichier
    Par fara morgana dans le forum Langage
    Réponses: 3
    Dernier message: 14/06/2006, 10h29

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