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 :

extraire des url avec une feuille xsl


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut extraire des url avec une feuille xsl
    bonjour à tous
    je suis étudiante en biologie j'ai besoin que quelqu’un m'aide
    à trouver une solution pour mon problème.

    voila le problème



    j'ai un problème avec les feuilles xsl

    donc ma question est la suivante : avec c 3 liens :

    http://www.marmiton.org/recettes/reche [...] st=5&start=-9

    http://www.marmiton.org/recettes/reche [...] st=5&start=10

    http://www.marmiton.org/recettes/reche [...] st=5&start=20


    chaque lien liste 10 recettes

    je veux une feuille xsl que j'appliquerai sur les 3 liens pour pouvoir récupérer les liens "URL" des 10 recettes.

    enfin pour lister les 30 URL

    mais que je le fasse avec une feuille xsl si t'as une idée ?


    juste pour un petit detail j'ai deja aspiré les 3 liens enfin leur code source ?

    donc je veux une feuille xsl que j'appliquerai sur les 3 fichiers.xhtml que j'ai aspiré



    feuille xsl

    sur

    a201.xhtml
    a111.xhtml
    a121.xhtml

    10 +10 +10
    = 30 urls

  2. #2
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Bonjour,

    tu fais ca sous Linux ?

    et es-ce que la feuille de style est appelée sur un serveur
    ou tu utilise simplement un aspirateur ?

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    [quote=polymorphisme;6821286]Bonjour,

    merci d'avoir répondu polymorphisme
    je suis sous Windows pour l'instant mais sinon j'ai Linux aussi

    je travaille en local pour l'instant mais j'ai un serveur aussi

    donc je veux editer une feuille xsl je ne sais pas quoi mettre à l’intérieur de cette feuille qui pourra faire le travail au lieu de y'aller à chaque page et d'extraire les 10 urls manuellement et de les lister je ne sais pas si c faisable ou pas une feuille xsl avec script ? j’espère que je ne dis pas de bêtises


    je veux récupérer à partir de http://www.marmiton.org/recettes/rec...x?aqt=nouilles ça ?
    resultats :


    /recette_porc-saute-aux-nouilles-chinoises_36503.aspx
    /recette_nouilles-chinoises-facon-corinne_41618.aspx
    /recette_nouilles-soba-aux-graines-de-sesame_82164.aspx
    /recette_potage-asiatique-aux-nouilles-porc-et-crevettes_28939.aspx
    /recette_nouilles-birmanes_46215.aspx
    /recette_nouilles-chinoises_17284.aspx
    /recette_nouilles-a-ma-facon_27725.aspx
    /recette_nouilles-chinoises-soja-et-poulet-au-wok-facile_42206.aspx
    /recette_nouilles-chinoises-au-chorizo_86837.aspx



    mais avec une feuille xsl qui va s'appliquer sur le fichier.xhtml ou "code source" que j'ai aspiré

    pour lister les URLs
    au dessus



    enfin cette feuille va s'appliquer sur toutes les pages ?

    et ensuite récupérer 30 URLs

  4. #4
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Ok, c'est possible de faire cela avec XSL.

    Pourquoi ne fais tu pas cela avec la commande wget sous Linux ?

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    c'est la raison de ma présence ici
    je ne sais pas comment procéder je suis vraiment nouvelle
    je suis débutante ds tout

    j'ai pas l'habitude de travailler sur Linux et les commandes ?

    si tu as une idée ce génial de ta part

  6. #6
    Membre Expert
    Avatar de polymorphisme
    Homme Profil pro
    Publishing
    Inscrit en
    Octobre 2009
    Messages
    1 460
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Publishing
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2009
    Messages : 1 460
    Par défaut
    Dans ce cas, je te conseil la commande wget.
    La page man donne pas mal d'informations (man wget)
    et il y a pleins d'exemples sur l'Internet.
    Je n'ai plus les options de la commande en tête
    mais wget permet de filter les URLs des pages que tu souhaite aspirer.

    Je crois que ce sera plus facile à mettre en oeuvre qu'avec une feuille de style XSLT.

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    merci je vais regarder

  8. #8
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Après sur ta page XHTML, il suffira d'appliquer un XPath du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    //a[@class="lienTitreResultat"]/@href
    en gros ta feuille de style se limitera à un template :[code]<xsl:template match="/">
    <xsl:for-each select="//a[@class="lienTitreResultat"]/@href">
    <xsl:value-of select="."/>
    </xsl:for-each>
    </template>

    Après, comme l'a dit polymorphisme, la solution la plus simple n'est probablement pas de passer par du XSL.

    Une recherche texte avec des expressions régulières (ou bien tout simplement l'utilisation de wget - qui existe aussi bien sous Windows que sous Linux - s'il le permet) serait plus facile à mettre en oeuvre.

  9. #9
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    Bonjour et merci luceka

    pour la réponse c'est ce que je cherchais mais une fois que j'ai ma feuille.xsl

    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlnssl="http://www.w3.org/1999/XSL/Transform" version="2.0">

    <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>

    <xsl:template match="/">
    <xsl:for-each select="//a[@class="lienTitreResultat"]/@href">
    <xsl:value-of select="."/>
    <xsl:sort select="lienTitreResultat"/>
    </xsl:for-each>
    </xsl:template>

    </xsl:stylesheet>



    ce que je vaudrais savoir ? comment appliquer cette feuille.xsl
    sur le code source de la page http://www.marmiton.org/recettes/rec...x?aqt=nouilles c'est à dire j'ai :
    feuille.xsl------> page.html et resultats = 10 urls triés afin de retirer les doublons sachant que jai récupéré le code source que j'appelle page.html
    bien sur sous linux une commande qui appelle feuille.xsl et l'applique sur page.xhtml ou *.xhtml

    et ma 2eme questions appliquer la meme feuille.xsl sur 30 page html qui contiennent toutes 10 URL de recettes NOUILLES
    bien sur sous linux une commande qui appelle feuille.xsl et l'applique sur page.xhtml ou *.xhtml


    voila quelqu'un à une idée ?plz

  10. #10
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Je dirais que le plus simple pour toi est d'utiliser un parseur XSLT externe, comme Xalan :
    http://xml.apache.org/xalan-j/commandline.html

    Ca te permet de limiter le côté programmation au strict minimum (une boucle sur chaque fichier HTML qui fera appel à Xalan).

    Sinon pas mal de langages (PHP, Java, Python, Perl, C, C++, ...) possèdent des parseurs XSLT. Pour les utiliser renseigne-toi par toi-même.

  11. #11
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Ceci dit, une simple ligne de commande Perl (qui est cross-platform) te permettrait d'avoir le résultat attendu :
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    perl -pe 's/<a\s+class=["']lienTitreResultat["']\s+href=["'](.*?)["']/$1/' ton_fichier_html

  12. #12
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    merci luceka est ce que tu crois que mon code est correct ?

    est ce que t’arrive aux résultats si tu as déjà essayé

    mais qu'avec une feuille xsl pas avec autre perl sauf si je ne comprend pas trop a ça ?

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    quelqu'un à une idée je sais que c'est dans le genre
    xsltproc fichier.xsl dfichier.xml



    mais j'y arrive pas

    help

  14. #14
    Membre Expert
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Par défaut
    Non, ton code n'est pas correct, il faut mettre le sort juste après le for-each.

    Après, je ne vois pas pourquoi tu parles de xsltproc alors que je te donnais Xalan pour ça (et la ligne de commande à utiliser est sur la page que j'ai fournie).

  15. #15
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <!-- version 1.0 suffit -->
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
     
    <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
     
    <xsl:template match="/">
    <!-- attention
    <xsl:for-each select="//a[@class="lienTitreResultat"]/@href">
    -->
    <xsl:for-each select="//a[@class='lienTitreResultat']/@href">
        <!-- 
            sort auprès lienTitreResultat, c'est non-sens si ça veut dire un texte litéral. 
            Si c'est une balise, la référence est certainement fausse puisque le contexte est en rapport avec @href.
         -->
        <!-- j'essai de deviner sort auprès de @href, remplacez ce que vous voulez vraiment. -->
        <xsl:sort select="." />
        <xsl:value-of select="."/>
    </xsl:for-each>
    </xsl:template>
     
    </xsl:stylesheet>

  16. #16
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    merci,

    mais j'ai xsltporc installé chez moi et il faur que je le fasse avec ça
    alors j'ai essayé d'appliquer le fichier en ligne de commandes

    xsltproc feuille.xsl fichier.xhtml

    mais rien ne se passe je comprend pas comment voir le resultat ?

    j'ai essayé ca xsltproc feuille.xsl fichier.xhtml > doc.html

    je valide apres ca saute à ligne et ca met rien

    je ne comprend pas ?

  17. #17
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    MERCI tsuji

    Voila j'ai essayé d'appliquer la feuille de style mais rien ne se passe apart si jai loupé quelque chose :

  18. #18
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    Je ne sais combien de confiance on peut faire part pour la feuille xslt, mais la version que je arrive basée sur les précédentes devrait syntactiquement parlant. Mais...
    j'ai essayé ca xsltproc feuille.xsl fichier.xhtml > doc.html
    Alors, ça, ça se trahit. D'abord, la feuille a l'intention de résulter un fichier textuel, pas une page html; et puis, xhtml n'est pas un document qui s'écrit dans un espace de nom null! Si vous ne comprenez tout ça, c'est difficile à explique dans un forum de ce genre, il faut se faire éduquer d'après les livres tranquillement...

    Voici ce que je vais proposer vous faire pour que vous pouvez au moins avoir quelque évidence à la main après tout ça. Faites cette ligne de commande:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    xsltproc -o output.txt feuille.xsl fichier.xhtml
    Et puis le feuille.xsl comme ça.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
    <xsl:template match="/">
    <xsl:for-each select="//*[local-name()='a' and @class='lienTitreResultat']/@href">
        <xsl:sort select="." />
        <xsl:value-of select="."/>
        <xsl:text>&#x0a;</xsl:text>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    Si votre feuille xhtml contient au moins un "anchor" comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <a class="lienTitreResultat" href="xyz">etc etc</a>
    (avec un espace de nom défault http://www.w3.org/1999/xhtml sous-entendu), vous devriez au moins obtenir quelque info sortant dans le fichier output.txt.

    Voilà ce que je puisse proposer pour sauver la situation.

  19. #19
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 15
    Par défaut
    grand merci tsuji :

    voila un bout de mon code xhtml :


    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
    <div>
    		<table cellspacing="0" cellpadding="0" border="0" id="ctl00_cphMainContent_mrmSearch_repResults" style="border-width:0px;width:100%;border-collapse:collapse;">
    			<tr class="result1-2">
    				<td class="txtResultat" valign="top">
                        <table cellpadding="0" cellspacing="0" border="0">
                            <tr>
                                <td rowspan="3" valign="top" width="84" style="padding-right:10px;">
                                    <div class="imgResultatRecette">
                                        <a href='/recettes/recette_nouilles-chinoises-facon-corinne_41618.aspx' class="lienTitreResultat">
                                            <img width="80" height="80" border="0" src='http://images.marmitoncdn.org/recipephotos/multiphoto/26/26b35b37-fcf0-42de-b45a-574f195d6c7e_tn-80x80.jpg' /></a>
                                    </div>
                                </td>
                                <td valign="top" width="235" class="miniTxtRecette">
                                    <a class="lienTitreResultat" href='/recettes/recette_nouilles-chinoises-facon-corinne_41618.aspx'>Nouilles chinoises façon Corinne</a><br />
                                    Accompagnement<br />
                                    Végétarien
                                </td>

    moi ce que je veux récupérer c'est ça :

    /recettes/recette_nouilles-chinoises-facon-corinne_41618.aspx

    dans toute la page y'a 10 urls : voir code source de http://www.marmiton.org/recettes/rec...x?aqt=nouilles

    mais si tu regarde dans le bout de code au-dessus le /recettes/recette_nouilles-chinoises-facon-corinne_41618.aspx est répétée 2 fois

    donc j'aimerai enlever les doublons à l'affichage

    je vais essayer avec ta méthode

    une idée ?

  20. #20
    Membre Expert Avatar de tsuji
    Inscrit en
    Octobre 2011
    Messages
    1 558
    Détails du profil
    Informations forums :
    Inscription : Octobre 2011
    Messages : 1 558
    Par défaut
    j'aimerai enlever les doublons à l'affichage
    Oui, mais c'est un peu embêtant...
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="text" indent="no" omit-xml-declaration="yes"/>
    <xsl:template match="/">
    <xsl:variable name="classname" select="'lienTitreResultat'" />
    <xsl:for-each select="//*[local-name()='a' and @class=$classname]">
        <xsl:sort select="@href" />
        <xsl:if test="count(preceding::*[local-name()='a' and @class=$classname
            and @href=current()/@href])=0">
            <xsl:value-of select="."/>
            <xsl:text>&#x0a;</xsl:text>
        </xsl:if>
    </xsl:for-each>
    </xsl:template>
    </xsl:stylesheet>
    Et ça ne s'améliore guère même si je utiliserais l'outil de xsl:key... mais bref; pourtant, ça a la bénéficie de mettre le fil de raisonnement le plus clair possible avec un minimum de moyens.

Discussions similaires

  1. Extraire des lignes avec une formule
    Par maxxxime dans le forum Excel
    Réponses: 9
    Dernier message: 15/06/2010, 17h05
  2. [XL-2003] extraire des donnees sur une feuille
    Par louis10 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 18/03/2010, 21h05
  3. Réponses: 2
    Dernier message: 05/03/2008, 19h30
  4. extraire des urls d'une page web
    Par Zorgloub dans le forum C++
    Réponses: 2
    Dernier message: 10/11/2007, 00h16
  5. Réponses: 7
    Dernier message: 23/01/2006, 11h53

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