Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

importare xml in un database

148 views
Skip to first unread message

fellymar

unread,
Jul 14, 2004, 6:57:50 AM7/14/04
to
Ciao a tutti, ho provato senza successo a leggere in file xml per poi
importarlo in una tabella di un database.
ho usato il componente XMLDocument di delphi7 ma riesco a leggere solo
alcuni dati.
Per esempio con il file XML:

<?xml version="1.0"?>
<rubrica>
<computer>127.0.0.1</computer>
<user>Utente</user>

<contatto>
<nome>Giulio</nome>

<indirizzo>
<via>Via Roma 7</via>
<citta>Genova</citta>
</indirizzo>
<email>us...@domain.com</email>
<tel>0123456789</tel>
<fax>9876543210</fax>

</contatto>
</rubrica>

tramite il seguente codice:

XMLDoc.FileName := 'c:\pp.xml';
XMLDoc.Active:=True;

StartItemNode:=XMLDoc.DocumentElement.ChildNodes.FindNode('contatto');
ANode := StartItemNode;

STitle := ANode.ChildValues['nome'];
sLink := ANode.ChildNodes['email'].Text;
sDesc := ANode.ChildNodes['tel'].Text;

showmessage(STitle);
showmessage(sLink);
showmessage(sDesc);

riesco a leggere nome,email,tel ma non so come fare per leggere il
contenuto di computer,user e i dati del contatto all'interno di
indirizzo.

Mi sapete dare una dritta?
Grazie a tutti

MassimoB

unread,
Jul 14, 2004, 7:05:06 AM7/14/04
to
"fell...@libero.it (fellymar)" nel precedente post ha scritto:

>Ciao a tutti,

Ciao

>ho provato senza successo a leggere in file xml per poi
>importarlo in una tabella di un database.
>ho usato il componente XMLDocument di delphi7 ma riesco a leggere solo
>alcuni dati.

>[...]


>XMLDoc.FileName := 'c:\pp.xml';
>XMLDoc.Active:=True;
>StartItemNode:=XMLDoc.DocumentElement.ChildNodes.FindNode('contatto');
>ANode := StartItemNode;
>STitle := ANode.ChildValues['nome'];
>sLink := ANode.ChildNodes['email'].Text;
>sDesc := ANode.ChildNodes['tel'].Text;

>[...]


>Mi sapete dare una dritta?

bè ... forse hai già provato e sto dicendo una fesseria
... anche perchè io non l'ho provato ... ma credo che
sia la stessa cosa di quello che fai per il contatto
... dovresti partire da

>StartItemNode:=XMLDoc.DocumentElement.ChildNodes.FindNode('rubrica');
>ANode := StartItemNode;
>STitle := ANode.ChildValues['computer'];
>sLink := ANode.ChildNodes['user'].Text;
>etc

essendo un file xml, in pratica, una struttura ad
albero di nested tag, dovresti poter usare la stessa
modalita di visita che hai usato per il nodo contatto.

>Grazie a tutti

Ciao
MassimoB

---------------------------
http:\\www.massimobeschi.it

Donato Di Tullio

unread,
Jul 14, 2004, 9:04:02 AM7/14/04
to
fellymar ha scritto nel messaggio :

> Ciao a tutti, ho provato senza successo a leggere in file xml per poi
> importarlo in una tabella di un database.

Anch'io ho avuto la stessa necessitą proprio la settimana scorsa. Infatti
dovevo
importare un file .XML contenente gli ordini provenienti da Web.
Siccome perņ con gli strumenti di Delphi non ci ho capito niente e non avevo
il tempo per mettermeli a studiare perchč dovevo consegnare il programma con
urgenza ho fatto una cosa un po' diversa.
Praticamente mi sono detto che un file .XML altri non č che un banalissimo
file
di testo, quindi, me lo sono importato in una StringList e poi mi sono letto
il
contenuto della string list per passarlo sul database.

Ho fatto quindi una cosa del genere :

OrdiniTxt := TStringList.Create;
OrdiniTxt.LoadFromFile( 'c:\ordini.xml' );
for j := 0 to OrdiniTxt.Count - 1 do
begin
if ....

if ....

ecc ...
end;

E' sicuramente una cosa molto artigianale, ma ti posso garantire che
funziona alla perfezione.

Spero di esserti stato utile.

Donato Di Tullio


Antò LuZombi

unread,
Jul 14, 2004, 9:10:35 AM7/14/04
to

var
n: IXMLNode;
begin
//computer
n := XMLDocument1.DocumentElement.ChildNodes[0];
Edit1.Text := n.Text;
//user
n := XMLDocument1.DocumentElement.ChildNodes[1];
Edit2.Text := n.Text;
//contatto->nome
n := XMLDocument1.DocumentElement.ChildNodes[2];
Edit3.Text := n.ChildNodes[0].Text;
//contatto->indirizzo->via
n := XMLDocument1.DocumentElement.ChildNodes[2];
Edit4.Text := n.ChildNodes[1].ChildNodes[0].Text;
//contatto->indirizzo->città
n := XMLDocument1.DocumentElement.ChildNodes[2];
Edit5.Text := n.ChildNodes[1].ChildNodes[1].Text;
//contatto->email
n := XMLDocument1.DocumentElement.ChildNodes[2];
Edit6.Text := n.ChildNodes[2].Text;
//contatto->tel
n := XMLDocument1.DocumentElement.ChildNodes[2];
Edit7.Text := n.ChildNodes[3].Text;
//contatto->fax
n := XMLDocument1.DocumentElement.ChildNodes[2];
Edit8.Text := n.ChildNodes[4].Text;
end;

> Grazie a tutti


--
Ciao, Anto', [37, 143, AQ]
MB C SC 220 CDI Magma Rot
"Di sempre cio' che senti e fai cio' che pensi."
G.G. Màrquez

Antò LuZombi

unread,
Jul 14, 2004, 9:26:00 AM7/14/04
to
In data Wed, 14 Jul 2004 15:10:35 +0200, Antò LuZombi ha scritto:

[cut]

;o)

oppure cosi:

begin
Edit1.Text := XMLDocument1.DocumentElement.ChildNodes['computer'].Text;
Edit2.Text := XMLDocument1.DocumentElement.ChildNodes['user'].Text;
Edit3.Text :=
XLDocument1.DocumentElement.ChildNodes['contatto'].ChildNodes['nome'].Text;
Edit4.Text :=
XMLDocument1.DocumentElement.ChildNodes['contatto'].ChildNodes['indirizzo'].ChildNodes['via'].Text;
Edit5.Text :=
XMLDocument1.DocumentElement.ChildNodes['contatto'].ChildNodes['indirizzo'].ChildNodes['citta'].Text;
Edit6.Text :=
XMLDocument1.DocumentElement.ChildNodes['contatto'].ChildNodes['email'].Text;
Edit7.Text :=
XMLDocument1.DocumentElement.ChildNodes['contatto'].ChildNodes['tel'].Text;
Edit8.Text :=
XMLDocument1.DocumentElement.ChildNodes['contatto'].ChildNodes['fax'].Text;
end;

fellymar

unread,
Jul 19, 2004, 5:40:21 AM7/19/04
to
Grazie mille ci sono riuscito!!!
0 new messages