XML Dateien öffnen und in MySQL DB schreiben - Wie?
-
Hallo Zusammen,
ich stehe aktuell vor einem kleinen Problem. Bis jetzt habe ich immer Textdateien/CSV importiert und die Daten in eine MySQL Datenbank geschrieben. Das hat auch alles wunederbar geklappt.Jetzt habe ich allerdings Daten in einer XML Datei und muss diese in meine MySQL DB importieren. Bis jetzt habe ich noch nicht wirklich mit dem Thema XML beschäftigt.
Gibt es beim BCB die Möglichkeit XML Dateien zu öffnen und auf die darin stehenden Daten zuzugreifen?
Im voraus vielen Dank.
-
Hallo,
das geht sogar sogar sehr einfach.
Schau in der Hilfe nach TXMLDocument.
Nachfolgend ein kleines Beispiel, alles weitere sollte aus der Hilfe ersichtlich sein.#include <msxmldom.hpp> #include <XMLDoc.hpp> #include <xmldom.hpp> #include <XMLIntf.hpp> TXMLDocument *XMLDoc = new TXMLDocument(Application->MainForm); // !! hier darf nicht NULL übergeben werden, sonst Exception XMLDoc->DOMVendor = MSXML_DOM; XMLDoc->Active = true; XMLDoc->FileName = "C:\\XMLDatei"; XMLDoc->LoadFromFile(XMLDoc->FileName); //XMLDoc->Version = "1.0"; // XML Version //XMLDoc->Encoding = "UTF-8"; // Zeichensatz IXMLNode *NodeMain = XMLDoc->DocumentElement; if(NodeMain != NULL) { //NodeMain->NodeName // Zugriff auf die Attribute eines Konten OleVariant Value = NodeMain->GetAttribute("NodeAttribut"); // hier Value in den entsprechenden Datentyp umwandeln // Zugriff auf die untergeordneten Konten for(int iNode1 = 0;iNode1 < NodeMain->ChildNodes->Count;iNode1++) { IXMLNode *NodeTmp1 = NodeMain->ChildNodes->Nodes[iNode1]; if(NodeTmp1 == NULL) break; OleVariant Value = NodeTmp1->GetAttribute("NodeAttribut"); // hier Value in den entsprechenden Datentyp umwandeln // Zugriff auf die untergeordneten Konten for(int iNode2 = 0;iNode2 < NodeTmp1->ChildNodes->Count;iNode2++) { IXMLNode *NodeTmp2 = NodeMain->ChildNodes->Nodes[iNode2]; if(NodeTmp2 == NULL) break; ....... } } } XMLDoc->Active = false; delete XMLDoc;
-
Danke für deine Hilfe. TXMLDocument habe ich inzwischen auch in der Hilfe gefunden. Ich habe die Komponente aber nicht. Kann ich die Nachinstallieren?
-
TXMLDocument ist in der Tool-Palette in der Rubrik "Internet".
Mit welcher C++Builder-Version arbeitest du?
-
Da habe ich es leider nicht drin.
Es ist C++ Builder 6 Professional
-
Leider ist XML Unterstützung bei der 6er Version ab Enterprise und nicht in der Prof. Version enthalten.
Alternative XML libs:
http://www.grinninglizard.com/tinyxml/
http://www.xmlsoft.org/
-
Dann schau mal in der FAQ, dort is beschrieben wie es geht.
MfG Stephan
-
Ich benutze RapidXML und bin sehr zufrieden damit. Das ist eine Header-only Bibliothek, die auch vom Builder anstandslos übersetzt wird.
-
XML schrieb:
Leider ist XML Unterstützung bei der 6er Version ab Enterprise und nicht in der Prof. Version enthalten.
Alternative XML libs:
http://www.grinninglizard.com/tinyxml/
http://www.xmlsoft.org/TXMLDokument ist sehr wohl im BCB6 Prof. enthalten. Nur nicht in der Komponentenpalette, aber per Code erzeugen und benutzen ist kein Problem.
Hier ein kleiner Codeschnipsel. Läuft so mit BCB6 und XE2#if (__BORLANDC__ < 0x0640) // Beim BCB6 komme ich nur so an das Interface ran _di_IXMLDocument pXMLDocument = NewXMLDocument(); #else _di_IXMLDocument pXMLDocument; pXMLDocument = interface_cast<Xmlintf::IXMLDocument>(new TXMLDocument(NULL)); #endif pXMLDocument->LoadFromStream(stream); _di_IXMLNodeList nodeList; _di_IXMLNode node; nodeList = pXMLDocument->DocumentElement->GetChildNodes(); node = nodeList->FindNode(L"asdf");
-
Ja, wie im oben erwähnten FAQ-Eintrag beschrieben.