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 :

[XSLT] Récupérer un attribut sur un élément pointé par un IDREF


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 61
    Points : 92
    Points
    92
    Par défaut [XSLT] Récupérer un attribut sur un élément pointé par un IDREF
    Bonjour,

    Dans le cadre d'un projet d'étude, je travaille actuellement sur une feuille XSL pour transformer un document XML en XHTML.

    A l'intérieur de ce document, tous les éléments ou presque dispose d'un attribut id unique. Cet attribut a pour fonction d'une part de faciliter la manipulation des documents - XML et XHTML - par la suite et d'autre part de permettre de spécifier, pour chacun des éléments pour lesquels cela est possible, un type faisant directement référence à un autre élément du document XML via le mécanisme ID/IDREF - le but est de manipuler et représenter des schémas de type Merise/UML simples -.

    Au moment de l'affichage, je souhaiterais récupérer l'attribut 'name' de l'élément pointé par l'attribut 'type'. La solution à laquelle je suis arrivé consiste pour le moment en un template paramétré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <!-- Appel du template lors du travail sur l'élément typé -->
    <xsl:call-template name="get-datatype">
    	<xsl:with-param name="datatype" select="id(@type)"/>
    </xsl:call-template>
     
    <!-- Template -->
    <xsl:template name="get-datatype">
    	<xsl:param name="datatype" select="." />
     
    	<xsl:value-of select="$datatype/@name" />
    </xsl:template>
    Malheureusement, j'ai eu beau essayer de multiples syntaxes, je n'arrive pas à obtenir l'effet désiré. Et je n'arrive pas à mettre le doigt sur mon erreur...

    Si vous souhaitez avoir un exemple de fichier XML, il est disponible à cette adresse - DTD -. La feuille XSL complète est quant à elle visible ici et un exemple du résultat est disponible - sous réserve d'inscription et de connexion - dans la section "Plan de travail" de ce site.

    Merci d'avance.
    Fichiers attachés Fichiers attachés

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

    Informations forums :
    Inscription : Mai 2004
    Messages : 4 587
    Points : 7 103
    Points
    7 103
    Par défaut
    Bonjour,

    a priori le problème ne vient pas de ton code XSLT (je n'ai pas vérifié, mais ça me semble plus probable), mais du fait que la validation ne doit pas être activée au niveau de ton parseur XML. La fonction id() n'est fonctionnelle que si la DTD est intégralement interprêtée.

  3. #3
    Membre éclairé
    Inscrit en
    Octobre 2005
    Messages
    847
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 847
    Points : 841
    Points
    841
    Par défaut
    je n'ai pas pu t'aider car tes fichiers ne sont plus accessibles . peux tu les rendre dispo pour qu'on puisse les voir?

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 61
    Points : 92
    Points
    92
    Par défaut Forcement, le jour où on en a besoin ... C'est malheureusement récurrent.
    Citation Envoyé par valal
    Tes fichiers ne sont plus accessibles .
    Grmbl, c'est la dernière fois que je laisse un serveur sous la responsabilité de profs <.< - Désolé pour ceux d'entre vous qui le serait, mais la trop grand majorité de ceux que j'ai rencontré ces deux dernières années étaient des guignols aussi je commence à douter fortement de l'avenir de l'enseignement secondaire français[/troll] -

    A défaut de mieux - et parce qu'au final, c'est pas si mal et ca m'évite d'avoir à réinstaller l'application sur un autre serveur -, j'ai placé les fichiers en pièces jointes du premier post.

    Merci d'avance.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 61
    Points : 92
    Points
    92
    Par défaut
    Citation Envoyé par GrandFather
    La fonction id() n'est fonctionnelle que si la DTD est intégralement interprêtée.
    C'était effectivement ça.
    Ça m'aura valu une réécriture partielle du code de la transformation, puisque j'avais complètement oublié cette étape, et plusieurs corrections, tant dans le document XML que dans la DTD - ce sont, à peu de choses près, mes premiers à vrai dire -, mais maintenant cela fonctionne.

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 4
    Dernier message: 05/11/2014, 22h38
  2. XSD - attribut sur un élément simple avec restriction
    Par melleb dans le forum XML/XSL et SOAP
    Réponses: 2
    Dernier message: 29/03/2013, 11h27
  3. Réponses: 2
    Dernier message: 13/11/2011, 15h37
  4. [SimpleXML] Récupérer l'attribut d'un élément xml
    Par yann123456 dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 01/12/2008, 19h00
  5. [XSLT] Récupérer un attribut contenant un espace de noms
    Par GLSpirit dans le forum XSL/XSLT/XPATH
    Réponses: 8
    Dernier message: 20/07/2007, 10h12

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