PDA

Visualizza la versione completa : [DELPHI] Leggere i valori di un nodo XML


123delphi321
22-12-2018, 10:44
Ciao a tutti,

devo leggere dei valori scritti in un determinato nodo di un file xml.


dovrei leggere questo:
<root>
<testa>
........
</testa>
<body>
<1>
<mio Valore 1.1>
<mio Valore 1.2>
<mio Valore 1.3>
<mio Valore 1.4>
</1>
<2>
<mio Valore 2.1>
<mio Valore 2.2>
<mio Valore 2.3>
<mio Valore 2.4>
</2>
</body>
</root>

perfavore, qualcuno mi potrebbe suggerire come leggere i valori
<mio Valore 1.1>
<mio Valore 1.2>
<mio Valore 1.3>
<mio Valore 1.4>



grazie

alka
23-12-2018, 12:06
Per leggere un documento XML, puoi usare il componente TXMLDocument.

Per sapere come usarlo, studia questo esempio completo (http://docwiki.embarcadero.com/CodeExamples/Rio/en/TXMLDocument_use_case_(Delphi)) riportato nella documentazione ufficiale.

Non so se il file che hai riportato è puramente esemplificativo, ma dubito che possa essere considerato un file XML valido, dato che vi sono spazi nei nomi degli elementi, numeri al posto di lettere, ecc.

Comunque sia, proviamo a semplificare prendendo un esempio più pulito e più intuitivo, come quello riportato qui nella guida di W3CSchool (https://www.w3schools.com/xml/xml_tree.asp).

Se volessi ad esempio leggere tutti i titoli dei libri e scriverli in un TMemo, seguiti dalla lingua corrispondente, userei un codice simile a questo (non ottimizzato, ma utile per capire):



var
BookStore: IXMLNode;
BookNodeList: IXMLNodeList;
BookNode, TitleNode: IXMLNode;
I: Integer;
begin
Memo1.Clear;
XMLDocument1.LoadFromFile('E:\Temp\Sample.xml');
BookStore := XMLDocument1.DocumentElement;
if BookStore.LocalName = 'bookstore' then
begin
BookNodeList := BookStore.ChildNodes;
for I := 0 to BookNodeList.Count - 1 do
begin
BookNode := BookNodeList.Get(I);
TitleNode := BookNode.ChildNodes.FindNode('title');
Memo1.Lines.Add(TitleNode.Text);
Memo1.Lines.Add(TitleNode.AttributeNodes.FindNode( 'lang').Text);
end;
end;
end;



Il componente TXMLDocument può essere trascinato dalla toolbox dei componenti, oppure creato a runtime dinamicamente al momento del bisogno, con la classica forma



XMLDoc := TXMLDocument.Create(nil);
try
// ... uso il componente come sopra...
finally
XMLDoc.Free;
end;



Leggi la documentazione e prova a interpretare gli esempi rapportandoli al file XML che devi leggere.

Ciao! :ciauz:

123delphi321
23-12-2018, 15:37
grazie Alka!

Loading