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

XMLRAD Discussion :

Affecter un attribut dans un fichier XML ou XSL


Sujet :

XMLRAD

  1. #1
    Membre à l'essai
    Inscrit en
    février 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Affecter un attribut dans un fichier XML ou XSL
    Hello,

    Pour rendre "dynamique" la sortie HTML, je dois dans mon cas précis fournir une présentation dépendante des données et de l'utilisateur...

    j'utilise l'affectation dans le contexte de la variable XMLC_XSLFile de manière à créer autant de fichiers XSL qu'il m'en est nécessaire...

    Jusqu'ici tout va bien...

    Je désire maintenant customiser la présentation et donc mon fichier XSL,
    et je cherche la solution pour qu'en Delphi je puisse affecter par exemple l'attribut correspondant au titre de la page HTML...

    Meric de votre aide
    LLaurent

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 284
    Points : 344
    Points
    344
    Par défaut
    Pour customiser ton html généré, il faut que tes données XML soient différentes pour que ton XSL puisse les utiliser et faire une transformation différente d'un coup sur l'autre.

    Pour écrire dans le document XML depuis delphi, tu as plusieurs options :
    - Mettre des données dans le Context par code (Context.Values['Nom'] := Value et récupérer cette valeur dans le XMLGram avec un Assign par exemple.
    - Manipuler directement le document XML par code dans Delphi avec le XMLCursor OutputDoc. Plus compliqué, moins souple et obligation de recompiler ta DLL pour modifier les données.

    Une fois que toutes les données sont présentes dans le XML, ton XSL y aura accès et tu pourras modifier l'aspect de ton HTML...
    Nicolas

  3. #3
    Membre à l'essai
    Inscrit en
    février 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 24
    Points : 17
    Points
    17
    Par défaut OK, OK...
    Merci Nicolas,

    OK pour tes commentaires...

    Aujourd'hui, je désire changer complétement de style de présentation et donc je dois "tailler" dans mon fichier XSL...


    Aussi, je dois éventuellement rajouter des éléments, etc... mais là où je coince c'est sur certains attributs.
    'par exemple' le titre de ma nouvelle page...

    D'avance Merci

  4. #4
    RDM
    RDM est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    mars 2002
    Messages
    1 424
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : mars 2002
    Messages : 1 424
    Points : 2 871
    Points
    2 871
    Par défaut
    pourquoi ne pas faire un XSL par style différent ?
    RDM
    Tout Est Relatif
    Rubrique XMLRAD: http://xmlrad.developpez.com
    FAQ XMLRAD: http://xmlrad.developpez.com/faq/

  5. #5
    Membre à l'essai
    Inscrit en
    février 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Mais cela ne suffit pas
    Ce serait une solution simple,

    mais c'est trop simple, dans mon cas

    puisque je dois effectuer des requêtes dynamiques
    non pas au sens du contenu (comme habituel)
    mais au sens des propriétés sélectionnées :

    SELECT P1, P2, P3 from Table1, Table2...
    ou
    SELECT Px, Py, Pz from Container1, Container2....
    ou ...

    Donc, je dois construire des fichiers XSL dépendant de la demande de l'utilisateur...

    Merci pour vos réponses
    Laurent

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 284
    Points : 344
    Points
    344
    Par défaut
    XSL est sensible aux données, à toi de jouer pour faire en sorte que tes templates match soit appliquées ou non. Tu peux créer plusieurs templates portant le meme nom, avec un mode particuliers par exemple, ou encore mettre dans le match="" une condition dans le XPath (le match ne correspond pas à un nom d'element seulement, c'est en fait du XPath).
    Tu peux aussi utiliser des xsl:if, xsl:choose, etc, pour modifier le comportement à l'affichage.
    D'après ce qu'on voit dans les applis Delos, ils préfèrent faire un seul XSL, qui peut etre assez compliqué, plutot que plein de XSL qui reprendront tous les memes templates avec quelques differences. Ca permet de ne pas avoir à maintenir de multiples fichiers à chaque fois qu'il y a une modification...
    Faut que tu travailles tes skills en XSL, donc

    Pour tes extractions SQL, tu peux utiliser des "Templates Properties" dans le XMLGram. C'est une fonctionnalité avancée, pas vraiment documentée.
    Il suffit d'insérer dans ta requète SQL des variables du type {$Name}, où Name est un champ du Context. La valeur de ce champ sera prise et remplacé directement.

    Par exemple :
    SELECT PSN_ID, PSN_NAME FROM PERSON {$ORDER_CLAUSE}

    Par code tu taperas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if Context.Values['Order'] = '1' then
      Context.Values['ORDER_CLAUSE'] := 'ORDER BY PSN_NAME ASC'
    else 
      Context.Values['ORDER_CLAUSE'] := '';
    Il est indispensable de forcer le contenu d'une Template Property par code, afin d'être sûr de son contenu. Sans ca, un utilisateur mal intentionné pourrait exécuter le code SQL de son choix, en le passant simplement en paramètre HTTP (par exemple, ....Action?ORDER_CLAUSE=WHERE CHAMP IN (SELECT TABLE1.* FROM TABLE1, TABLE2, TABLE3)). Pas bon, donc
    Nicolas

  7. #7
    Membre à l'essai
    Inscrit en
    février 2003
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : février 2003
    Messages : 24
    Points : 17
    Points
    17
    Par défaut Merci Nicolas, mais revenons aux attributs ...
    Merci Nicolas,

    Surtout pour la solution de paramétrage de des "Templates Properties" dans le XMLGram, ça va certainement me servir beaucoup...
    D'autant que je réalise le paramétrage des extractions SQL sous Delphi

    Mais mon problème initial reste la customisation d'un fichier XSL de base...
    Aujourd'hui, je le charge lors de la fonction AfterXMLGram de ce service et je recompose le fichier XSL comme suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
            XMLDocument := TXMLCursor.Create;
        XMLDocument.Load('c:\projects\fibronet\Xml\Fibronet\FibronetXSL\QueryResults.xsl');
        XStr := XMLDocument.XML;
        XStr := StringReplace( XStr, '="Title">QueryResults', '="Title">Résultats : '  + OutputDoc.GetValue('QueryInfo/QueryLabel') , [rfReplaceAll]);
        XStr := StringReplace( XStr, '<td>InfoQueryResults</td>', XStrHeader, [rfReplaceAll]);
        XStr := StringReplace( XStr, 'name="colspan">12', 'name="colspan">'+IntToStr(NbShown), [rfReplaceAll]);
        XStr := StringReplace( XStr, '<xsl:value-of select="InfoQueryResults"/>', XStrRow, [rfReplaceAll]);
        XMLDocument.LoadXML(XStr) ;
    Je désire simplement faire ce traitement du fichier XSL de manière un peu plus "classique"...

    Alors j'aimerai donc changer certains attributs de mon fichier XML ou XSL, afin de recomposer le fichier XSL attendu...

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    janvier 2003
    Messages
    284
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : janvier 2003
    Messages : 284
    Points : 344
    Points
    344
    Par défaut
    euh...
    Je vois pas du tout pourquoi tu utilises ce genre de techniques... On n'a jamais besoin de faire de la modification du fichier XSL, puisqu'il est prévu à la base pour ca. Ce que tu fais, c'est équivalent à créer par code le HTML directement, au lieu de le faire faire par le XSL.

    Pour le premier exemple
    XStr := StringReplace( XStr, '="Title">QueryResults', '="Title">Résultats : ' + OutputDoc.GetValue('QueryInfo/QueryLabel') , [rfReplaceAll]);
    , tu remplace dans ton XSL par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...="Title">Resultat: <xsl:value-of select="/document/QueryInfo/QueryLabel" /></...
    Le XSL ira tout seul comme un grand chercher la valeur dans le XML et la mettra dans le flux de sorti HTML.
    Pareil pour le colspan... Ton NbShown doit provenir d'un nombre extrait de la base ou calculé... il te suffit de faire dans le XSL

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ...<td><xsl:attribute name="colspan"><xsl:value-of select="/document/Params/Colspan"/></xsl:attribute></td>
    Il ne faut surtout pas remplacer ton code XSL dynamiquement, il suffit de placer les bonnes données dans le XML et de les utiliser directement dans le XSL.

    Il ne faut pas oublier que XSL est sensible aux données, et transforme un XML vers un autre format. Si les données ne sont pas dans le XML, le XSL ne pourra rien y faire. A chaque fois qu'on est bloqué en XSL, ca signifie simplement que le XML n'est pas bien fait ou pas complet...
    Nicolas

Discussions similaires

  1. [PHP] Problème d'ajout d'attributs dans un fichier xml
    Par sismic dans le forum XSL/XSLT/XPATH
    Réponses: 1
    Dernier message: 10/06/2009, 18h16
  2. comment je pourrais modifier un attribut dans un fichier xml
    Par ryoussef19 dans le forum Visual C++
    Réponses: 6
    Dernier message: 24/08/2007, 15h16
  3. VBScript ASP ET XMLDOM Modification attribut dans un fichier XML
    Par PrinceMaster77 dans le forum VBScript
    Réponses: 12
    Dernier message: 11/06/2007, 07h13
  4. Lire un attribut dans un fichier XML en C++
    Par ti.k-nar dans le forum XML
    Réponses: 2
    Dernier message: 14/10/2002, 16h22

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