Lister les attributs d'un noeud XML [Résolu]

Messages postés
4
Date d'inscription
vendredi 29 décembre 2006
Dernière intervention
7 novembre 2008
- - Dernière réponse : cs_Delphiprog
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
- 2 janv. 2007 à 16:11
Bonjour, depuis quelques jours je suis confronte a un soucis.
je souhaite obtenir la quantite d'attributs que possede un noeud d'un fichier XML et pouvoir l'affichier sur une zone (Edit, memo).
Seulement je ne trouve pas les fonctions adequat.

Jarrive a lire la valeur d'un attribut lorsque je connais son nom, mais lorsque celui ci m'est inconnu je ne peut pas le faire.

J'ai trouver dans quelques langages la fonction "AttributeCount" mais qui n'existe pas en tant que telle dans delphi (j'utilise delphi 7).

De meme une fois mon premier probleme resolu existe t'il une methode du type "NextSibling" pour passer d'un attribut a un autre ?

merci
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
3
Merci
Bonjour wapok,

Les questions sur l'utilisation du composant TXmlDoxument sont rares mais toujours intéressantes.
Puisque tu sembles avoir franchi les premières barrières, je présume que tu sais manipuler une interface IXmlNode et ses descendants.

Dans le code qui suit et que j'ai déjà eu l'occasion de fournir sur ce forum, StockType : IXmlStockType est un descendant de IXmlNode. Sur chacun des noeuds, nous allons recherher le nombre d'attributs et, pour chacun d'eux, en afficher les nom et la valeur dans un composant TMemo.

procedure TForm1.btnLoadXMLClick(Sender: TObject);
var
  i, j: integer;
  s: string;
  li: TListItem;
  StockListType: IXMLStockListType;
  StockType: IXmlStockType;
const
  Fichier =  'test.xml';
begin
  ListView1.Items.Clear;

  XmlDocument1.LoadFromFile(Fichier);
  XMLDocument1.Active := True;

  try
    StockListType := GetStockList(XmlDocument1);
     for  i : = 0to StockListType.Count - 1 do
    begin
      //lecture d'un noeud xml
      StockType :=  StockListType.Stock[i];
      //remplir le listview avec les branches du noeud
      li := ListView1.Items.Add;
      li.Caption := StockType.Exchange;
      li.SubItems.Add(StockType.Name);
      li.SubItems.Add(StockType.Price);
      li.SubItems.Add(StockType.Currency);
      li.SubItems.Add(StockType.Symbol);
      li.SubItems.Add(IntToStr(StockType.Shares));

      //c'est ici que se trouve le bout de code 
      //qui te manque :   
       with  StockType do
      for j : = 0to AttributeNodes.Count -1do
      begin
       s :=  Exchange + '::' + AttributeNodes.Nodes[j].NodeName;
       S := S + '=' + AttributeNodes.Nodes[j].NodeValue;
       Memo1.Lines.Append(s);
       end ;
    end;
  finally
    XMLDocument1.Active : = False;
  end;

end;

La propriété Nodes peut aussi bien être adressée par une valeur d'index que par le nom de l'attribut :
property Nodes[const IndexOrName:OleVariant]:IXMLNode;default;

Tu vas enfin pouvoir passer un bon réveillon

PS : c'est toujours mieux de rechercher et de trouver par soi-même mais de là à rester coincé plusieurs jours sur un problème, faut pas non plus basculer dans l'excès inverse. Enfin, c'est courageux de ta part.

May Delphi be with you !
<hr color= "#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
=468_mes2

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 100 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
Messages postés
4
Date d'inscription
vendredi 29 décembre 2006
Dernière intervention
7 novembre 2008
0
Merci
merci de ton aide des que je retourne sous delphi je testerai :)
Commenter la réponse de wapok
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
0
Merci
J'apprécie beaucoup cette marque de confiance...

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
Commenter la réponse de cs_Delphiprog
Messages postés
4
Date d'inscription
vendredi 29 décembre 2006
Dernière intervention
7 novembre 2008
0
Merci
si tu etais en face de moi je te ferai un bisou !
Commenter la réponse de wapok
Messages postés
4580
Date d'inscription
samedi 19 janvier 2002
Dernière intervention
9 janvier 2013
0
Merci
Bon, bon, n'exagérons pas non plus...
Alors, on se la valide cette réponse ?
Bonne continuation.

May Delphi be with you !
<hr color="#008000" />
Pensez à cliquer sur Réponse acceptée lorsque la réponse vous convient.
http://www.afipa.net/
Commenter la réponse de cs_Delphiprog

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.