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

wapok 4 Messages postés vendredi 29 décembre 2006Date d'inscription 7 novembre 2008 Dernière intervention - 29 déc. 2006 à 13:20 - Dernière réponse : cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention
- 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
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 30 déc. 2006 à 16:47
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

Merci cs_Delphiprog 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 84 internautes ce mois-ci

Commenter la réponse de cs_Delphiprog
wapok 4 Messages postés vendredi 29 décembre 2006Date d'inscription 7 novembre 2008 Dernière intervention - 1 janv. 2007 à 16:40
0
Merci
merci de ton aide des que je retourne sous delphi je testerai :)
Commenter la réponse de wapok
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 1 janv. 2007 à 19:38
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
wapok 4 Messages postés vendredi 29 décembre 2006Date d'inscription 7 novembre 2008 Dernière intervention - 2 janv. 2007 à 09:59
0
Merci
si tu etais en face de moi je te ferai un bisou !
Commenter la réponse de wapok
cs_Delphiprog 4580 Messages postés samedi 19 janvier 2002Date d'inscription 9 janvier 2013 Dernière intervention - 2 janv. 2007 à 16:11
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.