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 :

Césure sur une transformation XSLT


Sujet :

XSL/XSLT/XPATH XML

  1. #1
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 121
    Points : 2 234
    Points
    2 234
    Par défaut Césure sur une transformation XSLT
    Bonjour tout le monde,

    Peut-être qu'un ninja XLST va pouvoir m'aider.

    J'ai obtenu un fichier XML de documentation depuis un projet Visual Studio.

    Dans l'objet members, se trouvent donc des objets member, et pour chacun l'attribut name est constitué de plusieurs parties séparées par un point :
    • l'espace de noms
    • le nom du projet
    • Controllers
    • le nom du contrôleur
    • le nom de la procédure, suivi entre parenthèses des types d'arguments


    et je voudrais effectuer une rupture sur le nom du contrôleur, et une autre sur le nom de la procédure (pour la procédure c'est plus évident puisque c'est l'élément individuel ; d'autres diraient atomique).

    Pour le contrôleur il y aura un titre, et pour la procédure, en plus de son titre, un tableau avec les différents attributs.

    Hum, une rupture à chaque membre ça serait facile, mais pour le contrôleur j'ai l'impression qu'il faut une astuce. Ça fait plusieurs années en fait que je n'ai plus touché à XSLT.

    Est-ce que ça branche quelqu'un ?

    Il y a une quinzaine d'années cette fonctionnalité s'appelait NDoc, ça aurait mérité d'être maintenu à jour.

  2. #2
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Points : 297
    Points
    297
    Par défaut
    Ca serait possible de voir ton exemple XML et ce que tu souhaites obtenir ?
    XSLT 1, 2 ?
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

  3. #3
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 121
    Points : 2 234
    Points
    2 234
    Par défaut
    OK. Comme c'est sur un autre système il faut que je prenne mon élan, mais je peux déjà dire l'essentiel.
    Dans le XML source (voir ce qui sort de Visual Studio avec l'option doc) j'obtiens

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <member name=whereever.WebAPI.Controllers.DoitController.DoThat(string msg)>
    et à la sortie je voudrais obtenir quelque chose comme :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <spacename>wherever</spacename>
    <controller>DoItController</controller>
    <functionName>DoThat</functionName>
    Depuis que j'ai posé cette question ici j'ai vu que pour faire ça il existe une fonction tokenize, mais il n'est pas évident de déclarer l'espace de nom qui va avec, "http://www.w3.org/2005/xpath-functions". Après il reste à avoir la bonne syntaxe pour s'en servir, mais je suppose que ça ça sera plus rapide.

    Je suppose qu'il doit y avoir un package NuGet à installer pour ça, encore s'agit-il de choisir le bon.

    J'utilise Visual Studio Pro 2017 version 15.9.14 sur un projet WinForms basé sur .Net 4.7.03190, et là-dedans les fonctions xpath ne sont pas reconnues par défaut.

  4. #4
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Points : 297
    Points
    297
    Par défaut
    Pour la partie "XSLT" (tu as parlé de tokenize, donc 2.0), une idée de départ :

    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="member">
            <member>
     
    		<xsl:variable name="valeur" select="@name" />
    		<xsl:variable name="tokenizedLine" select="tokenize($valeur, '\.')" />
     
    		<xsl:for-each select="$tokenizedLine">
    				<xsl:if test="position()=1">
    					<spacename><xsl:value-of select="normalize-space(.)"/></spacename>
    				</xsl:if>
    				<xsl:if test="position()=4">
    					<controller><xsl:value-of select="normalize-space(.)"/></controller>
    				</xsl:if>            
    				<xsl:if test="position()=5">
    					<functionName><xsl:value-of select="normalize-space(.)"/></functionName>
    				</xsl:if>               
    		</xsl:for-each>
     
        </member>       
    </xsl:template>
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

  5. #5
    Membre chevronné
    Profil pro
    Développeur Web
    Inscrit en
    Février 2008
    Messages
    2 121
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2008
    Messages : 2 121
    Points : 2 234
    Points
    2 234
    Par défaut
    Merci, je regarde ça mieux un peu plus tard.
    As-tu testé ?

    Pour le moment, dans un autre fil, après avoir noté que pour utiliser les fonctions XPath il faut la version 3 de XPath (c'est marqué quelque part sur w3.org), on a constaté que malgré plusieurs demandes depuis 2013 ce produit n'est toujours pas implémenté pour Visual Studio, donc il y a un appel à bonnes volontés (je pourrai te retrouver ça), mais pour le moment pour le XSLT je m'en suis tenu au champ avec ses points dedans, et ensuite je fais le reste avec une Macro Word.

    Je sais, ce n'est pas glorieux, mais ça devrait marcher.

  6. #6
    Membre actif
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Avril 2007
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 199
    Points : 297
    Points
    297
    Par défaut
    J'ai testé :

    résultat

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <member>
    	<spacename>whereever</spacename>
    	<controller>DoitController</controller>
    	<functionName>DoThat(string msg)</functionName>
    </member>
    "Chuck Norris a déjà compté jusqu'à l'infini. Deux fois."

Discussions similaires

  1. Réponses: 0
    Dernier message: 10/01/2012, 16h20
  2. Réponses: 0
    Dernier message: 10/01/2012, 16h19
  3. Réponses: 0
    Dernier message: 10/01/2012, 16h18
  4. Réponses: 8
    Dernier message: 12/07/2010, 13h27
  5. [XSLT] Disparition de caracteres $ge; lors d'une transformation xslt
    Par kalurar dans le forum Format d'échange (XML, JSON...)
    Réponses: 2
    Dernier message: 11/01/2010, 15h17

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