XML et Delphi

Résolu
Lamarmottedu73 Messages postés 19 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 14 mai 2009 - 31 oct. 2007 à 09:02
Lamarmottedu73 Messages postés 19 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 14 mai 2009 - 31 oct. 2007 à 15:44
Bonjour tlm, j'ai un problème avec Delphi et le XML. J'utilise un TXMLDocument dans un thread qui scrute différent fichier. Le problème intervien sur un balise du fichier XML.

<ComponentList>
   <Component Id="015-000-555-000">
      <Value>2</Value>
   </Component>
   <Component Id="015-077-666-000">
      <Value>33</Value>
   </Component>
   <Component Id="015-770-566-000">
      <Value>5</Value>
   </Component>
</ComponentList>

Pour accéder à ComponentList je fait un : XMLDocument.ChildNodes.Nodes['ComponentList'];
La question est comment faut-il procéder pour accèder à Component qui possède l'ID 015-077-666-000, sachant que l'ordre peut changer donc First ou Last ne peuvent fonctionner.

Merci pour votre aide car je bloc pas mal, c'est la première fois que je bosse avec du XML.

5 réponses

cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
31 oct. 2007 à 09:30
salut,

il te faut parcourir tout la liste de noeud et tester l'attribut. il n'y pas d'autre moyen d'accéder un noeud selon sa valeur d'attribut.

donc ça te donne un truc genre (pas testé, je suis sur j2me en ce moment):

function chercherNoeudParID(idToFound: string) : ixmlnode;
var
parent : ixmlnode;
begin
result := nil;
parent := XMLDocument.ChildNodes.Nodes['ComponentList'];

for i := 0 to parent.childnodes.count-1 do begin
noeud = parent.getnode(i);
if noeud.HasAttribute("id") then begin
  if noeud.Attributes["id"] = idToFound then begin¨
    result = noeud;
    exit;
  end;
end;
end;

end;

si tu choisit le format du xml et que tu as besoin de faire fréquemment
des sélections selon l'id, envisage d'utiliser l'ID comme nom de noeud.
ceci te opermet de faire directement un getnode(idToFound)

bon code,

Loda

PS: l'xml c'est pas super intuitif au début, mais après quelques utilisation, tu ne sait plus comment tu faisait avant :-)
<hr size ="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
3
Lamarmottedu73 Messages postés 19 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 14 mai 2009
31 oct. 2007 à 10:14
Merci bien je viens de coder le tout, corriger quelques truc (Adapter à mon code) et intégrer ça mache !!!
0
Guillemouze Messages postés 991 Date d'inscription samedi 25 octobre 2003 Statut Membre Dernière intervention 29 août 2013 6
31 oct. 2007 à 12:45
sinon (je sais pas si ca peut s'adapter a ton cas), tu peux aussi utiliser l'id comme nodename

<ComponentList>
   
  
  
</ComponentList>
0
cs_Loda Messages postés 814 Date d'inscription vendredi 3 novembre 2000 Statut Membre Dernière intervention 30 juillet 2009 3
31 oct. 2007 à 15:40
@[auteur/GUILLEMOUZE/184734.aspx Guillemouze]: tiens, on a les même idées... ;-)

A+

Loda
<hr size="2" width="100%" />Se poser les bonnes questions est le premier pas pour trouver les bonnes réponses.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Lamarmottedu73 Messages postés 19 Date d'inscription jeudi 26 mai 2005 Statut Membre Dernière intervention 14 mai 2009
31 oct. 2007 à 15:44
En fait je ne peut pas modifier les fichiers XML, ils sont généré par une autre appli donc je garde la première méthode. Par contre je garde l'astuce pour plus tard .

@+
0
Rejoignez-nous