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

XSL/XSLT/XPATH XML Discussion :

Fonction de recherche xsl/xml ?


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 25
    Par défaut Fonction de recherche xsl/xml ?
    Bonjour,

    je débute totalement en code xml/xsl et j'ai besoin d'extraire des données issues d'un fichier XML.
    Plus précisément, je suis parvenu à extraire certaines données comme ci dessous une liste de Hosts (ID, name,@...).
    Mais, à présent, j'ai besoin de rechercher dans le même fichier une donnée liée à une référence et d'en sortir une donnée associée.

    Voici un exemple de mon code XML, XSL et le résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [XML CODE]
     <Host id="id147154X3289" name="193.168.83.227_TEST" comment="" ro="False">
        <Interface id="id147156X3289" bridgeport="False" dyn="False" label="" security_level="0" unnum="False" unprotected="False" name="eth0" comment="" ro="False">
         <IPv4 id="id147157X3289" name="193.168.83.227_TEST:eth0:ip" comment="" ro="False" address="193.168.83.227" netmask="255.255.255.224"/>
        </Interface>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    [XSL CODE]
      <xsl:for-each select="FWObjectDatabase/Library/ObjectGroup/ObjectGroup/Host">
    		<xsl:value-of select="@id"/><xsl:text>|</xsl:text>	
    		<xsl:value-of select="@name"/><xsl:value-of select="$separateur"/>
    		<xsl:value-of select="Interface/IPv4/@address"/><xsl:value-of select="$separateur"/>
    		<xsl:value-of select="Interface/IPv4/@netmask"/>
    		<xsl:value-of select="$newline"/>
    	</xsl:for-each>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    [RESULT]
    host_name1;host_ip;host_netmask
    host_name2;host_ip;host_netmask
    ...
    Je souhaite ajouter sur chaque ligne de résultat un nom de groupe qu'il faut aller chercher dans une autre balise.
    Le groupe contient une liste d'object.
    Je dois rechercher la même référence de l'objet Hosts (ID=id147154X3289(variable)) contenu dans une balise GROUP "ObjectRef ref=(variable)" et d'en extraire
    le nom de groupe associé "NAME_GROUPE_xxx" (variable)
    Voici une partie du code XML de la section GROUP contenant cette information:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    [XML CODE]
          <ObjectGroup id="stdidxxxx" name="Groups" comment="" ro="False">
            <ObjectGroup id="id154198X31777" name="NAME_GROUPE_1" comment="" ro="False">
              <ObjectRef ref="id154181X31777"/>
            </ObjectGroup>
            <ObjectGroup id="id141136X21781" name="NAME_GROUPE_2" comment="" ro="False">
              <ObjectRef ref="id147156X3289"/>
              <ObjectRef ref="id141142X21781"/>
            </ObjectGroup>
          </ObjectGroup>
          <ObjectGroup
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    [RESULT]
    host_name;host_ip;host_netmask;host_group
    Merci d'avance pour votre aide sur ce sujet.

    Cdt

    Breizho

  2. #2
    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
    Hello :

    - aller chercher les <ObjectRef> où qu'ils soient : - ne prendre que celui qui a la bonne référence :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //ObjectRef[@ref = 'id147154X3289']
    - remonter au parent de cet <ObjectRef> (son parent c'est <ObjectGroup>) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //ObjectRef[@ref = 'id147154X3289']/..
    - récupérer le nom de ce <ObjectGroup> :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //ObjectRef[@ref = 'id147154X3289']/../@name
    C'est bon jusque-là ?
    (Note : ce n'est pas la seule manière de faire. On peut aussi envisager //ObjectGroup[ObjectRef[@ref = 'id147154X3289']]/@name, mais un prédicat dans un prédicat, il y en a qui ont mal à suivre.)


    Il reste un problème : là la référence id147154X3289 je l'ai citée comme constante, mais comment faire pour reprendre l'id du <Host> en cours ?
    Jusqu'ici tu faisais simplement @id mais tu dois te douter que là ça n'ira pas, car ça ressemble beaucoup au @ref, qui n'est pas un attribut de <Host> mais de <ObjectRef>. Donc quelque part on voit bien que ça n'irait pas chercher l'id au bon endroit.

    Une solution est d'utiliser current() :
    qui va donc chercher l'attribut id du nœud en cours, le <Host> sélectionné dans le for-each.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  3. #3
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 25
    Par défaut
    Merci beaucoup pour ce retour.
    Je comprend la démarche mais je ne parviens pas à coder.

    Voici ce que j'ai compris mais qui ne fonctionne pas (désolé je débute).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
      <xsl:for-each select="FWObjectDatabase/Library/ObjectGroup/ObjectGroup/Host">
    		<xsl:value-of select="@id"/><xsl:text>|</xsl:text>	
    		<xsl:value-of select="@name"/><xsl:value-of select="$separateur"/>
    		<xsl:value-of select="Interface/IPv4/@address"/><xsl:value-of select="$separateur"/>
    		<xsl:value-of select="Interface/IPv4/@netmask"/>
    			<xsl:for-each select="ObjectRef .">
    				<xsl:value-of select="ObjectRef[@ref = current()/@id]/../@name ."><xsl:text>|</xsl:text>
    			</xsl:for-each>
    		<xsl:value-of select="$newline"/>
    	</xsl:for-each>
    Ce serait qq chose comme cela ?

  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
    Ok, alors trois choses :

    - Euh... c'est quoi cet 'espace point', où est-ce que je t'ai dit de mettre un espace puis un point.... Oh ! Euh, je vois ce qui se passe. J'ai modifié mon message du dessus. Efface-moi tous ces 'espace point' et recommence avec ça.

    - Si je ne me trompe pas, tu ne veux chercher qu'un seul nom de groupe pour chaque Host, n'est-ce pas ? Il n'y a donc aucune raison de faire un for-each. Un for-each, c'est quand on veut plusieurs machins, pas quand on en veut un.

    - Il me semble que tout ce que je t'ai montré commence par //
    Mais je ne vois pas de // dans ton code.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  5. #5
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 25
    Par défaut
    Oui, un seul nom de groupe pour chaque Host.

    Je te remercie beaucoup Thelvin. Cela fonctionne à présent et je commence à comprendre.

    Ta réponse m'a été très efficace.
    J'aurai certainement d'autres questions ultérieurement car je vais compliquer un peu les choses :-).

    Merci à toi.

  6. #6
    Membre averti
    Homme Profil pro
    Architecte de base de données
    Inscrit en
    Février 2015
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte de base de données
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2015
    Messages : 25
    Par défaut
    Re-Bonjour,

    mon besoin évolue, à présent, je souhaite récupérer et mettre en variable une chaine de caractère "#xxxx" localisée dans un fichier xml entre des balises comme ci dessous ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
               <NATRuleOptions>
                  <Option name="color">#C08B5A</Option>
                </NATRuleOptions>
    Le code ci dessous m'affiche bien "color" mais j'ai besoin d'afficher la variable qui serait dans cet exemple: #C08B5A

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    		<xsl:for-each select="NATRuleOptions/Option">
    			<xsl:variable name="color" select="@name"/>
    			<xsl:value-of select="$color"/>
    		</xsl:for-each>
    Merci d'avance pour votre aide.

    Cdt

Discussions similaires

  1. Réponses: 2
    Dernier message: 19/04/2013, 09h24
  2. [String] Fonction de recherche de caractères numériques
    Par david71 dans le forum Général Java
    Réponses: 10
    Dernier message: 16/02/2005, 12h05
  3. XML -> XSL <- XML
    Par Punky65250 dans le forum XSL/XSLT/XPATH
    Réponses: 14
    Dernier message: 16/09/2004, 09h29
  4. [xsl][XML] création d'un index
    Par Boosters dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 28/11/2002, 08h29
  5. xml -> xsl -> xml
    Par virgile04 dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 10/10/2002, 16h53

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