Thema: Delphi XML to MySQL

Einzelnen Beitrag anzeigen

Benutzerbild von Computerbabalulu
Computerbabalulu

Registriert seit: 26. Sep 2003
233 Beiträge
 
#1

XML to MySQL

  Alt 4. Okt 2004, 04:35
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

Was muss ich ändern? Bekomme es einfach nicht hin

Gruß Frank
Frank
  Mit Zitat antworten Zitat