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 :

cibler l'extraction du text [FAQ]


Sujet :

XSL/XSLT/XPATH XML

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    yos
    yos est déconnecté
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Par défaut cibler l'extraction du text
    bonjour,
    pour mieux poser ma question voici un 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
    22
    23
    24
    25
    26
    27
    ...
    <table>
      <tr>...</tr>
      <tr>
       <td>
         <b>Titre</b>
         <b>INDICATIONS</b>
        <br />
        <br />
        text1
        <br />
        text2
        <br />
        text3
        <br />
        <br />
        <br />
        <b>conseils</b>
        <br />
        <br />
        text4
        <br />
        <br />
      </td>
     </tr>
     <tr>...</tr>
    </table>
    A partir de cette source j'aimerai pouvoir extraire text1 text2 text3
    Voici l' XSL
    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
    <xsl:template match="/">
      <xsl:element name="doc">    
        <xsl:choose>
         <xsl:when test="//b[contains(.,'INDICATIONS')]">		
          <xsl:element name="index">
            <xsl:attribute name="item">   
             <xsl:text>IND</xsl:text>
            </xsl:attribute>       
                <xsl:value-of select="//b[contains(.,'INDICATIONS')]/following-sibling::text()"/>
          </xsl:element>
          </xsl:when>
        </xsl:choose>
     
      </xsl:element>
    </xsl:template>
    cela ne me recupère que text1 (idem avec following::text())
    comment recupérer text2 et text3

    Merci pour votre aide

  2. #2
    yos
    yos est déconnecté
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Par défaut
    j'essay avec la fonction generate-id() :

    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
    <xsl:template match="/">
      <xsl:element name="doc">    
        <xsl:choose>
         <xsl:when test="//b[contains(.,'INDICATIONS')]">		
          <xsl:element name="index">
            <xsl:attribute name="item">   
             <xsl:text>IND</xsl:text>
            </xsl:attribute>       
              <xsl:apply-templates select="//b[contains(.,'INDICATIONS')]"/>
          </xsl:element>
          </xsl:when>
        </xsl:choose>
     
      </xsl:element>
    </xsl:template>
     
    <xsl:template match="//b[contains(.,'INDICATIONS')]">
          <xsl:for-each select="following-sibling::text()[generate-id(preceding::b[contains(.,'INDICATIONS')]) = generate-id(current())]"> 
             <xsl:value-of select="normalize-space(.)"/>
         </xsl:for-each>
    </xsl:template>

    mais cela me récupère tous les text
    merci pour votre aide

  3. #3
    Membre éclairé Avatar de luta
    Inscrit en
    Novembre 2003
    Messages
    1 038
    Détails du profil
    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 038
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="//text()[preceding::b[contains(.,'INDICATIONS')] "> 
      <xsl:value-of select="."/>
    </xsl:for-each>

  4. #4
    Expert confirmé
    Avatar de GrandFather
    Inscrit en
    Mai 2004
    Messages
    4 587
    Détails du profil
    Informations personnelles :
    Âge : 55

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Par défaut Re: cibler l'extraction du text
    Bonjour,

    Citation Envoyé par yos
    cela ne me recupère que text1 (idem avec following::text())
    C'est normal : xsl:value-of convertit en chaîne la variable passée en paramètre et une liste de noeud convertie en chaîne renvoie le contenu du premier noeud de la liste. La solution est celle de tiscars, utiliser un for-each pour faire une itération sur tous les noeuds text() sélectionnés.

    L'axe preceding étant assez lent, il est préférable d'utiliser des axes moins "coûteux" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="//b[contains(.,'INDICATIONS')]/../text()"> 
      <xsl:value-of select="."/> 
    </xsl:for-each>
    FAQ XML
    ------------
    « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser »
    Giacomo Leopardi

  5. #5
    yos
    yos est déconnecté
    Membre confirmé
    Inscrit en
    Mai 2005
    Messages
    140
    Détails du profil
    Informations forums :
    Inscription : Mai 2005
    Messages : 140
    Par défaut
    Merci tiscars et GrandFather
    les solution que vous m'aviez proposé récupère tous les texts hors le but c'est de récupérer juste text1 text2 text3

    voici une solution qui a l'air de fonctionner
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <xsl:for-each select="following-sibling::text()[generate-id(preceding::b[1]) = generate-id(current())]"> 
        <xsl:value-of select="normalize-space(.)"/> 
    </xsl:for-each>
    donc parapor à ma dernière solution j'ai remplacer b[contains(.,'INDICATIONS')] par b[1] pour que cela fonctionne mais je ne comprends pas le truc !?

    Merci pour votre aide

Discussions similaires

  1. Extraction du text dans un fichier html
    Par projetGTR dans le forum Web
    Réponses: 15
    Dernier message: 20/09/2007, 11h30
  2. Extraction de texte dans une page HTML
    Par ninox_ dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 02/05/2007, 17h29
  3. [RegEx] Extraction de texte situé entre deux balises
    Par morpho365 dans le forum Langage
    Réponses: 7
    Dernier message: 27/03/2007, 18h18
  4. Extraction de texte dans un fichier
    Par chris91 dans le forum Langage
    Réponses: 4
    Dernier message: 18/08/2006, 16h09
  5. Extraction de texte de pages web?
    Par VinnieMc dans le forum Web
    Réponses: 4
    Dernier message: 01/03/2006, 19h42

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