|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 4 ![]() |
Bonjour,
J'ai un problème lors de la lecture d'un fichier xml. J'essaie de lire ce fichier grâce à l'instruction Load de XMLCursor : FileCursor := TXMLCursor.Create; FileCursor.Load('c:\linear.xml'); Jusque la, cela fonctionne, mais le problème arrive lorsque je veux faire un SELECT dans le flux, cela ne marche pas: FileCursor.Select('/TransXChange/Operators/LicensedOperator').GetValue('OperatorShortName'). Ceci me renvoie du vide alors qu'il y a bien quelque chose dans 'OperatorShortName'. J'ai trouvé que le problème provennait du premier noeu du fichier: Code :
Donc, auriez vous la solution pour réussir à lire ce type de fichier avec un XMLCursor ? Je vous remercie d'avance pour votre aide. |
||
|
|
00
|
|
|
#2 |
|
Membre Expert
![]() |
Le problème vient du namespace par défaut: xmlns="http://www.transxchange.org.uk/"
si tu le retires tu vas pouvoir naviguer correctement avec un select d'autre part tu peux directement faire: Code :
FileCursor.GetValue('/TransXChange/Operators/LicensedOperator/OperatorShortName').
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 4 ![]() |
Merci pour ta réponse.
Pourrais tu m'expliquer en quoi le "xmlns="http://www.transxchange.org.uk/" empeche de faire un simple SELECT dans le flux car je ne saisis pas le principe. D'autre part, j'ai essayé ta méthode avec le GetValue mais cela ne fonctionne pas non plus. De toute façon, je ne vois pas comment parcourir un flux facilement sans un SELECT car j'aurais besoin de parcourir par exemple tout les "LicensedOperator" qui sont dans le noeux "operators", et un GetValue ne va me renvoyer que le premier il me semble? La seule solution serait donc d'enlever le xmlns="http://www.transxchange.org.uk/" en ouvrant le fichier une première fois dans le code, puis relire le fichier avec le XMLCursor.Load ? |
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() |
si un namespace explicite est déclaré, tu peux faire un Select corect en faisant:
/document/myns:myelement/data le problème vient du namespace par défaut qui qaulifie automatiquement le noeud courant et les sous noeuds avec ce namespace. pour le select arrive a fonctionner il faudrait introduire le namespace dan le Context XPath du select pour qu'il arrive a le sélectionner. Le problème c'est que tu peux définir un namespace par défaut a tous les niveaux et pour tous les noeuds: Code :
http://www.topxml.com/people/bosley/defaultns.asp ou alors en rescannant la chaine XPath étape par étape http://weblogs.asp.net/pglavich/arch...09/278565.aspx donc le mieux reste de virer le namespace par défaut. dans XMLUtils tu as une fonction jsutement pour cela: CleanDefaultNamespace Pour le GetValue c'est effectivement pour récupérer une valeur unitaire. mais comme je voyais "Select('').GetValue", pour moi c'est équivalent a un seul GetValue.
__________________
RDM Tout Est Relatif Rubrique XMLRAD: http://xmlrad.developpez.com FAQ XMLRAD: http://xmlrad.developpez.com/faq/ |
||
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : juillet 2005 Messages : 4 ![]() |
J'ai opté pour la facilité et j'ai donc utilisé la fonction CleanDefaultNamespace comme tu me l'as conseillé et cela fonctionne !
Code :
FileCursor.LoadXML(CleanDefaultNameSpace(FileCursor.ContainerXML)); En tout cas, merci pour toutes ces infos. |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com