parsen großer xml files über 8 MB

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • parsen großer xml files über 8 MB

    hi leute,

    bekomme probleme mit dem speicher und bekomme logischerweise zu oft einen memory oversize error.

    verarbeite große xml mit expat, muss sie nämlich in die db schreiben.

    gibt es eine methode xml files auszulesen, die wirklich groß sind. irgendeine technik, dass man den ram immer wieder frei gibt?

    danke.

    ciao
    tydu

  • #2
    Ich würde sagen, du machst was gewaltig falsch. Expat läuft Ereignisorientiert also SAX. Es wird also Zeile für Zeile verarbeitet und da sollte eigentlich nie der Speicher ins Endlose rennen da nur eine einzige Zeile im Speicher landen sollte. Bei DOM könnte ich es ja verstehen. Ausser du hast das ganze XML in einer Zeile stehen. Weiss jetzt nicht genau wie da verfahren wird und ob da die ganze Zeile eingelesen wird. Musst einfach mal testen.

    MfG Markus

    Kommentar


    • #3
      er wandelt ja das ganze xml file in ein array um.
      schätze das das zu viel speicher in anspruch nimmt.

      meine weitere verarbeitung geht aus dem array aus, weil er sich verschiedene sachen auswerten muss.

      vielleicht mach ich ja grundlegend etwas falsch.

      ich verwende:

      xml_parser_create()
      und xml_parse_into_struct, welches mir das ganze in ein array packt.

      im grunde würde es mir ja reichen, wenn er das ganze, also alle xml inhalte in die datenbank schmeißt, weil ich es dann in der datenbank ohne speicherprobleme beeinflusßen könnte.

      ist der ansatz besser, als in ein array schmeißen?
      wenn ja, wie schmeiß ich am besten (performanceschonend) das ganze teil in die db?

      ist für mich ein reines datenaustauschmedium, nichts für die darstellung, wird halt leider oft einige mb groß.

      danke für weitere tipps.

      ciao
      tydu

      Kommentar


      • #4
        Da ich nicht weiss wie deine Struktur ausschaut würde ich die XML File mit SAX auslesen. Da ich annehme es handelt sich bei den Daten um eine Liste von Objekten würde ich eine Klasse erstellen. Beim öffnen eines Listenobjektes bzw. Tags würde ich ein einmalig erstelltes Objekt leeren. Bei den Kinderelementen dann das Objekt mit Eigenschaften befüllen und beim schliessen des Listetags eine Store Methode aufrufen die die Eigenschaften in der DB speichert.

        <shop> // Erstellen des Objektes
        <book> // Objekt leeren
        <name>hallo</name> // Objekt befüllen
        <isbn>öfjöf sfj...</isbn> // Objekt befüllen
        </book> // Objekt in der DB speichern
        </shop>

        MfG Markus

        Kommentar


        • #5
          danke für den ansatz markus,

          ja, die xml structur ist relativ einfach.

          wie erfolgt das leeren knotenweise, welche sax befehle?

          thx & bye
          tydu

          Kommentar

          Lädt...
          X