Nirvana Posté 15 janvier 2013 Signaler Posté 15 janvier 2013 Histoire de ne pas polluer le fil sur la programmation objet, je pose ma question ici. Je galère en ce moment sur XSLT, je suis allé voir sur plein de pages différentes (w3schools, entre autres) et je n'arrive pas à répondre à la consigne suivante : J'ai un fichier de ce genre-là (sur 950 lignes) : <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE tags SYSTEM "http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/IM12/Projet/tags.dtd"> <tags xmlns="http://crim.fr/ns/graph"> <w lemma="déclaration" pos="NOM">Déclaration</w> <w lemma="du" pos="PRP:det">des</w> <w lemma="droit" pos="NOM">droits</w> <w lemma="de" pos="PRP">de</w> <w lemma="le" pos="DET:ART">l'</w> <w lemma="homme" pos="NOM">homme</w> <w lemma="et" pos="KON">et</w> <w lemma="du" pos="PRP:det">du</w> <w lemma="citoyen" pos="NOM">citoyen</w> <w lemma="@card@" pos="NUM">26</w> <w lemma="août" pos="NOM">août</w> <w lemma="." pos="SENT">.</w> <w lemma="@card@" pos="NUM">1789</w> <w lemma="le" pos="DET:ART">Les</w> <w lemma="représentant" pos="NOM">représentants</w> <w lemma="du" pos="PRP:det">du</w> <w lemma="peuple" pos="NOM">peuple</w> <w lemma="français" pos="ADJ">français</w> (...) <w lemma="préalable" pos="ADJ">préalable</w> <w lemma="indemnité" pos="NOM">indemnité</w> <w lemma="." pos="SENT">.</w> </tags> et je dois écrire une feuille de style XSLT qui me permet de "supprimer les occurrences de ponctuations (les noeuds à attribut pos="PUN") à l'exception du point de fin de phrase (les noeuds à attribut pos="SENT"), de mots grammaticaux et de diverses catégories grammaticales ad libitum." Pour commencer, j'ai essayé d'obtenir une sortie XML en ne gardant que les noeuds d'une même catégorie (genre tous les NOM) mais je n'y arrive pas. Par exemple, j'ai essayé ça : <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes"/> <!-- Sélectionner tous les noeuds w ayant un attribut pos qui a la valeur NOM--> <xsl:template match="//w[@pos='NOM']"> <!-- Copier le noeud courant--> <xsl:copy/> </xsl:template> </xsl:stylesheet> Et xsltproc me donne : <?xml version="1.0"?> Déclaration des droits de l' homme et du citoyen 26 août . 1789 Les représentants du peuple français , Alors que je veux ça (par exemple) : <?xml version="1.0" encoding="UTF-8" standalone="no"?> <!DOCTYPE tags SYSTEM "http://pagesperso-systeme.lip6.fr/Jean-Francois.Perrot/inalco/XML/IM12/Projet/tags.dtd"> <tags xmlns="http://crim.fr/ns/graph"> <w lemma="déclaration" pos="NOM">Déclaration</w> <w lemma="droit" pos="NOM">droits</w> <w lemma="homme" pos="NOM">homme</w> <w lemma="citoyen" pos="NOM">citoyen</w> <w lemma="août" pos="NOM">août</w> <w lemma="représentant" pos="NOM">représentants</w> </tags> Quelqu'un pourrait m'expliquer comment on fait ? Merci.
Nirvana Posté 15 janvier 2013 Auteur Signaler Posté 15 janvier 2013 Bon, apparamment ça marche si je fais <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" encoding="utf-8"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="*[contains(@pos,'NOM')]"/> </xsl:stylesheet>
Marchange Posté 15 janvier 2013 Signaler Posté 15 janvier 2013 Je ne peux pas t'aider mais W3schools n'est pas conseillé et n'est pas affilié au W3C contrairement à ce qu'ils étaient de faire croire : http://w3fools.com/
Silence Posté 15 janvier 2013 Signaler Posté 15 janvier 2013 Destrate les exfoliants en dérivant le double noeud façon upping, puis code les émoluments en backing source. Ça devrait le faire.
h16 Posté 16 janvier 2013 Signaler Posté 16 janvier 2013 A tout hasard, regénère les flagbits et recompile le noyau. On sait jamais.
Poil à gratter Posté 16 janvier 2013 Signaler Posté 16 janvier 2013 Bon, apparamment ça marche si je fais <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="xml" indent="yes" encoding="utf-8"/> <xsl:template match="@*|node()"> <xsl:copy> <xsl:apply-templates select="@*|node()"/> </xsl:copy> </xsl:template> <xsl:template match="*[contains(@pos,'NOM')]"/> </xsl:stylesheet> Je te conseille de lire le chapitre de ce bouquin qui explique comment marche XSLT: pas tout le bouquin ca sert a rien, mais la partie théorique sur XSLT est très claire. http://www.amazon.com/XSLT-Programmers-Reference-2nd-Edition/dp/1861005067 Bon, ca fait bien longtemps que j'ai pas utilise de XSLT (mais qui utilise encore ca de nos jours ??), mais de tête l'idée c'est d'avoir un matcher sur tous les nœuds qui fait une copie du nœud, et un matcher pour les nœuds avec l'attribut PUN qui lui ne fait rien du tout (aucune sortie). Et voila. <xsl:template match="node() | @*"> <xsl:copy> <xsl:apply-templates select="node() | @*"/> </xsl:copy> </xsl:template> <xsl:template match="lemma[@pos='PUN'"/>
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant