|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre régulier
![]() Didier CabaléConseil - Consultant en systèmes d'information Inscription : août 2004 Messages : 102 ![]() |
[Delphi +TXMLCursor +TXSLProc]
Bonjour, je n'arrive pas à obtenir le résultat souhaité lorsque je veux transformer un TXMLCursor (par aXSLProc.Process(aCursor);). Pour arriver à mes fins, je suis obligé, avant la transformation, de "recharger" mon TXMLCursor avec la méthode "aCursor.LoadXML(aXMLString);" pour info, voici mon code source en Delphi: Code :
Est-ce là le comportement normal du TXSLProc? PS: je tiens à disposition éventuellement les fichiers xml et xsl ayant servi à l'exemple. Merci |
||
|
|
00
|
|
|
#2 |
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
Le xml source peut nous aider.
Peut etre ta selection ne représente pas qu'un seul élément et du coup le curseur se positionne sur le premier, alors que le texte xml lui représente la totalité. Il me semble que Node et contenu XML peuvent etre différent. Tu pourras vérifier cela en deguggant. En résumé c'est peut etre ton xpath qui n'est pas bon ? Michael |
|
|
00
|
|
|
#3 | |||
|
Membre régulier
![]() Didier CabaléConseil - Consultant en systèmes d'information Inscription : août 2004 Messages : 102 ![]() |
Citation:
Je précise mon code: Code :
|
|||
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
Ce que je veux dire c'est que le select renvoie une reference à un/plusieurs élément(s) dans un document. Le load lui recharge le document comme si il etait neuf. On perd ainsi tous les autres éléments qui ne sont pas dans le scope de la sélection.
Je pense que le xslproc considère l'ensemble du document et pas simplement les éléments selectionnés. Un aCursor.Select('/') avant et apres ton load ne renverra pas du tout la même chose. Du coup si on réfléchi cela devient normal que tu ais à faire le load avant, non ? Michael |
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
Je viens de te relire... et c'est ce que tu as compris avant moi. Mais moi ca ne me choque pas!
|
|
|
00
|
|
|
#6 | |
|
Membre régulier
![]() Didier CabaléConseil - Consultant en systèmes d'information Inscription : août 2004 Messages : 102 ![]() |
Citation:
Je reviens sur mon pb: ce que je veux dire c'est que le TXSLProc semble ne pas traiter aCursor (cf s := aXSLProc.Process(aCursor);), et ceci bienque aCursor.xml contienne bien le flux xml souhaité. Ce que je constate en revanche c'est que TXSLProc semble traiter le document aDocument. Comme je veux que TXSProc traite aCursor et pas aDocument, j'arrive à mes fins en redéfinissant le contenu de mon TXMLCursor avec un TXMLCorsor.LoadXML(s) Est-ce + clair? |
|
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() |
ce que dit Jeweller est correct. le XSLProc travaille sur l'ensemble du document. Alors qu'avec un Select tu positionnes sur un sous-noeud donc ca doit sans doute pas marcher.
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#8 | |
|
Membre Expert
![]() |
Citation:
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
|
00
|
|
|
#9 | |
|
Membre régulier
![]() Didier CabaléConseil - Consultant en systèmes d'information Inscription : août 2004 Messages : 102 ![]() |
Citation:
Merci |
|
|
|
00
|
|
|
#10 |
|
Membre Expert
![]() |
ah vala ! c'est + clair comme ca
il faut que tu crées un nouvel XMLCursor et que tu fasses un appendXMLCursor du fragment que tu as sélectionné.
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#11 | |
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
Autrement dit, le aCursor.LoadXML(s) est aussi une solution!
Et pour répondre à ta question: Citation:
Michael |
|
|
|
00
|
|
|
#12 |
|
Membre régulier
![]() Didier CabaléConseil - Consultant en systèmes d'information Inscription : août 2004 Messages : 102 ![]() |
1. en voilà une réponse qu'elle est bonne !!
2. moralité (pour moi): parfois, il vaut mieux expliquer ce qu'on veut faire au lieu d'aller se perdre dans des explications compliquées et qui peuvent dérouter le lecteur Merci pour votre aide à tous!! |
|
|
00
|
|
|
#13 | |
|
Membre Expert
![]() |
Citation:
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
|
00
|
|
|
#14 | |
|
Membre régulier
![]() Didier CabaléConseil - Consultant en systèmes d'information Inscription : août 2004 Messages : 102 ![]() |
Bonjour,
Citation:
Donc ma question devient: "Comment transformer (par TXSLProc.Process) une sélection qui comprend plusieurs éléments?" Si çà n'est pas possible directement, comment feriez-vous? Merci Didier |
|
|
|
00
|
|
|
#15 | ||
|
Membre Expert
![]() |
Citation:
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
||
|
|
00
|
|
|
#16 | ||
|
Membre confirmé
![]() Inscription : août 2003 Messages : 354 ![]() |
La racine d'un document XML ne peut avoir qu'un seul élément. Il faut donc que tu "encapsules" l'ensemble de tes éléments dans un seul avant de l'affecter à un curseur vide. Tu devras peut etre modifier ton xsl.
Un truc dans ce genre la peut etre: Code :
|
||
|
|
00
|
|
|
#17 | |
|
Membre régulier
![]() Didier CabaléConseil - Consultant en systèmes d'information Inscription : août 2004 Messages : 102 ![]() |
Citation:
Bravo et Merci!! |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com