Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   XML (https://www.delphipraxis.net/46-xml/)
-   -   Delphi XML to MySQL (https://www.delphipraxis.net/31084-xml-mysql.html)

Computerbabalulu 4. Okt 2004 03:35


XML to MySQL
 
Hallo

Ich nutze folgenden Code um XML Daten in eine MySQL DB zu schreiben:

Delphi-Quellcode:
//#######################################################################//
//## Procedure ProcessFile:                                           ##//
//#######################################################################//
//##      Datum: Änderung:                                            ##//
//##      ====== =========                                            ##//
//##  08.10.2003 Initial Release                                      ##//
//#######################################################################//
procedure TForm1.ProcessFile(Filename: TFileName);
var
  I: Integer;
  XMLDoc: IXMLDOMDocument2;
  dealer, envelope, department, extracode, operator: IXMLDOMNode;
  Order_Nodes: IXMLDOMNodeList;

begin
   // XML COM Interface laden
  XMLDoc := CoDOMDocument40.Create;
  XMLDoc.setProperty('NewParser', True);
  XMLDoc.load(Filename);
   // Fehler überprüfen
  if XMLDoc.parseError.errorCode <> 0 then
  begin
    ShowMessage('XML Fehler: '#13#10 + XMLDoc.parseError.reason);
    Exit;
  end;
  // alle Order_Nodes Nodes heranholen
  Order_Nodes := XMLDoc.documentElement.selectNodes('order-section');
  for I := 0 to Pred(Order_Nodes.length) do
  begin
    dealer := Order_Nodes.item[I].selectSingleNode('dealer');
    envelope := Order_Nodes.item[I].selectSingleNode('envelope');
    department := Order_Nodes.item[I].selectSingleNode('department');
    extracode := Order_Nodes.item[I].selectSingleNode('extracode');
    operator := Order_Nodes.item[I].selectSingleNode('operator');
    ZQuery.Insert; // Datei in Appendmodus setzen
    with ZQuery do
    begin
      if Assigned(dealer) then
      FieldByName('dealer').AsString:= dealer.text;
      if Assigned(envelope) then
      FieldByName('envelope').AsString := envelope.text;
      if Assigned(department) then
      FieldByName('department').AsString := department.text;
      if Assigned(extracode) then
      FieldByName('extracode').AsString := extracode.text;
      if Assigned(operator) then
      FieldByName('operator').AsString:= operator.text;
     end;
    ZQuery.Post; // Satz schreiben
   end;
end;

Die XML Datei sieht wie folgt aus.....
XML-Code:
<batch-section>
   <machine-id>      21   </machine-id>
   <equipment-type>   11   </equipment-type>
   <pricing-data>      1   </pricing-data>

   <order-section>
      <dealer>    520526 </dealer>
      <envelope>  160000 </envelope>
      <department>    41 </department>
      <extracode>      0 </extracode>
      <operator>     630 </operator>

      <cd_sn>              721 </cd_sn>
      <terminal_id>    1066627 </terminal_id>
      <selection_type>       3 </selection_type>

      <boid> 00401783-520526-160000-01066627-000721 </boid>

      <article-section>
         <article> 1791 </article>
         <qty>      59 </qty>
      </article-section>
   </order-section>

   <order-section>
      <dealer>    520242 </dealer>
      <envelope>  322456 </envelope>
      <department>    41 </department>
      <extracode>      0 </extracode>
      <operator>     630 </operator>

      <cd_sn>              488 </cd_sn>
      <terminal_id>    1066720 </terminal_id>
      <selection_type>       3 </selection_type>

      <boid> 00401783-520242-322456-01066720-000488 </boid>

      <article-section>
         <article> 1791 </article>
         <qty>      55 </qty>
      </article-section>
   </order-section>
 
 ....usw........

</batch-section>
Wie kann ich es machen, dass ich auch die Daten aus der "Article-Section" (Article und Qty) mit in die DB importiere?

Zitat:

Order_Nodes := XMLDoc.documentElement.selectNodes('order-section');
So komme ich ja wohl nicht rann :gruebel:

Was muss ich ändern? Bekomme es einfach nicht hin :wall:

Gruß Frank

Computerbabalulu 4. Okt 2004 05:59

Re: XML to MySQL
 
Mh.... :gruebel:

Ich glaub ich hab´s ..........

Delphi-Quellcode:
//#######################################################################//
//## Procedure ProcessFile:                                           ##//
//#######################################################################//
//##      Datum: Änderung:                                            ##//
//##      ====== =========                                            ##//
//##  08.10.2003 Initial Release                                      ##//
//#######################################################################//
procedure TForm1.ProcessFile(Filename: TFileName);
var
  I: Integer;
  XMLDoc: IXMLDOMDocument2;
  dealer, envelope, department, extracode, operator, article, qty: IXMLDOMNode;
  Order_Nodes: IXMLDOMNodeList;

begin
   // XML COM Interface laden
  XMLDoc := CoDOMDocument40.Create;
  XMLDoc.setProperty('NewParser', True);
  XMLDoc.load(Filename);
   // Fehler überprüfen
  if XMLDoc.parseError.errorCode <> 0 then
  begin
    ShowMessage('XML Fehler: '#13#10 + XMLDoc.parseError.reason);
    Exit;
  end;
  // alle Order_Nodes Nodes heranholen
  Order_Nodes := XMLDoc.documentElement.selectNodes('order-section');
  for I := 0 to Pred(Order_Nodes.length) do
  begin
    gauge1.maxvalue := zquery.FieldCount;
    gauge1.Visible:= True;
    // nodes mit inhalt heranholen
    dealer := Order_Nodes.item[I].selectSingleNode('dealer');
    envelope := Order_Nodes.item[I].selectSingleNode('envelope');
    department := Order_Nodes.item[I].selectSingleNode('department');
    extracode := Order_Nodes.item[I].selectSingleNode('extracode');
    operator := Order_Nodes.item[I].selectSingleNode('operator');
    article := Order_Nodes.item[I].selectSingleNode('article-section/article'); // hier einfach 'article-section' eingefügt...
    qty := Order_Nodes.item[I].selectSingleNode('article-section/qty'); // hier einfach 'article-section' eingefügt...

    ZQuery.Insert; // Datei in Appendmodus setzen
    with ZQuery do
    begin
      if Assigned(dealer) then
      FieldByName('dealer').AsString:= dealer.text;
      if Assigned(envelope) then
      FieldByName('envelope').AsString := envelope.text;
      if Assigned(department) then
      FieldByName('department').AsString := department.text;
      if Assigned(extracode) then
      FieldByName('extracode').AsString := extracode.text;
      if Assigned(operator) then
      FieldByName('operator').AsString:= operator.text;
      if Assigned(article) then
      FieldByName('article').AsString:= article.text;
      if Assigned(qty) then
      FieldByName('qty').AsString:= qty.text;
      gauge1.progress := gauge1.progress + 1;
    end;
    ZQuery.Post; // Satz schreiben
   end;
   gauge1.progress := 0;
   gauge1.Visible:= false;

end;
:roll: scheint zu funzen :gruebel:


Gruß Frank

Computerbabalulu 4. Okt 2004 07:47

Re: XML to MySQL
 
jetzt hab ich doch noch ein Problem.... :wall:

Wie soll ich diesen xml File in die DB importieren?

XML-Code:
<batch-section>
    <machine-id>       1 </machine-id>
    <equipment-type>   2 </equipment-type>
    <pricing-data>     0 </pricing-data>
    <order-section>
       <dealer>   809983   </dealer>
       <envelope>   181828   </envelope>

       <department> 41   </department>

       <global>
      <article>   1740   </article>
       </global>

       <part>
       <linecode>8901</linecode>
       <article-section>
      <article>   2651   </article>
      <qty>      52   </qty>
       </article-section>
       </part>

       <part>
       <linecode>8902</linecode>
       <article-section>
      <article>   2651   </article>
      <qty>      53   </qty>
       </article-section>
       </part>

    </order-section>
    <order-section>
       <dealer>   225885   </dealer>
       <envelope>   182038   </envelope>

       <department> 41   </department>

       <global>
      <article>   1149   </article>
       </global>

       <part>
       <linecode>8901</linecode>
       <article-section>
      <article>   1357   </article>
      <qty>      56   </qty>
       </article-section>
       </part>

       <part>
       <linecode>8902</linecode>
       <article-section>
      <article>   1357   </article>
      <qty>      54   </qty>
       </article-section>
       </part>

       <part>
       <linecode>8903</linecode>
       <article-section>
      <article>   1359   </article>
      <qty>      1   </qty>
       </article-section>
       </part>

    </order-section>
</batch-section>
Hier gibt es 2 oder sogar manchmal auch noch mehrmals den Abschnitt <Part> (bis zu 10x) Also Lincode 8901 - 8910 wenn das hilft? :gruebel:

In der Tabelle soll es dann so stehen....

"dealer","envelope","department","Articel_Global", "Lincode1","Article1","qty1","linecode2","Article2 ","qty2" usw....

Jemand ne Idee ?

Bissher habe ich oben stehenden code verwendet...........

Gruß Frank

Computerbabalulu 4. Okt 2004 16:54

Re: XML to MySQL
 
:roll: *mal nach vorne schiebt*

shmia 4. Okt 2004 17:11

Re: XML to MySQL
 
Zitat:

Zitat von Computerbabalulu
Hier gibt es 2 oder sogar manchmal auch noch mehrmals den Abschnitt <Part> (bis zu 10x) Also Lincode 8901 - 8910 wenn das hilft? :gruebel:

In der Tabelle soll es dann so stehen....

"dealer","envelope","department","Articel_Global", "Lincode1","Article1","qty1","linecode2","Article2 ","qty2" usw....

Hierarchische Daten (eine Bestellung besteht aus einem oder mehreren Artikel) können nur sinnvoll in mehreren Tabellen abgelegt werden.
Deine Idee mit "Article1" bis "Article10" ist Banane.
Hier sind 2 Tabellen mit einer Master-Dateil Beziehung erforderlich.

Computerbabalulu 4. Okt 2004 17:15

Re: XML to MySQL
 
Zitat:

Deine Idee mit "Article1" bis "Article10" ist Banane.
:roll: mag sein das die Idee Banane ist :mrgreen:

Hab kein Problem damit die Daten auf mehrere Tabellen zu verteilen. Muss sie halt nur erst mal darein bekommen :roll:
Wie würde es denn mit 2 oder mehreren Tabellen gehen?

Gruß Frank

Computerbabalulu 5. Okt 2004 04:31

Re: XML to MySQL
 
:? *mal nach vorne schiebt*

Kann mir keiner helfen? Wie macht man das mit einer Master-Deteil Tabelle?

Gruß Frank

Computerbabalulu 5. Okt 2004 17:54

Re: XML to MySQL
 
:roll: *schieb*

Kann mir keiner helfen :wall: :cry:

FAlter 5. Okt 2004 17:56

Re: XML to MySQL
 
Ih, zwei schiebepostings hintereinander :shock:

Da WILL ich gar nicht helfen, damit darf man keinen Erfolg haben.

Computerbabalulu 5. Okt 2004 19:57

Re: XML to MySQL
 
:( Na Super... Will soll man es denn sonst machen wenn man Hilfe benötigt :gruebel:

Sehr konstruktiv :thumb: Danke :!:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz