XML et Delphi [Résolu]

Lamarmottedu73 19 Messages postés jeudi 26 mai 2005Date d'inscription 14 mai 2009 Dernière intervention - 31 oct. 2007 à 09:02 - Dernière réponse : Lamarmottedu73 19 Messages postés jeudi 26 mai 2005Date d'inscription 14 mai 2009 Dernière intervention
- 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.
Afficher la suite 

Votre réponse

5 réponses

cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 31 oct. 2007 à 09:30
+3
Utile
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.
Cette réponse vous a-t-elle aidé ?  
Commenter la réponse de cs_Loda
Lamarmottedu73 19 Messages postés jeudi 26 mai 2005Date d'inscription 14 mai 2009 Dernière intervention - 31 oct. 2007 à 10:14
0
Utile
Merci bien je viens de coder le tout, corriger quelques truc (Adapter à mon code) et intégrer ça mache !!!
Commenter la réponse de Lamarmottedu73
Guillemouze 1015 Messages postés samedi 25 octobre 2003Date d'inscription 29 août 2013 Dernière intervention - 31 oct. 2007 à 12:45
0
Utile
sinon (je sais pas si ca peut s'adapter a ton cas), tu peux aussi utiliser l'id comme nodename

<ComponentList>
   
  
  
</ComponentList>
Commenter la réponse de Guillemouze
cs_Loda 900 Messages postés vendredi 3 novembre 2000Date d'inscription 30 juillet 2009 Dernière intervention - 31 oct. 2007 à 15:40
0
Utile
@[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.
Commenter la réponse de cs_Loda
Lamarmottedu73 19 Messages postés jeudi 26 mai 2005Date d'inscription 14 mai 2009 Dernière intervention - 31 oct. 2007 à 15:44
0
Utile
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 .

@+
Commenter la réponse de Lamarmottedu73

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.