mediengestalter.info
FAQ :: Mitgliederliste :: MGi Team

Willkommen auf dem Portal für Mediengestalter

Aktuelles Datum und Uhrzeit: Mi 24.04.2024 06:12 Benutzername: Passwort: Auto-Login

Thema: XML-Datei auslesen und in Datenbank schreiben vom 25.07.2008


Neues Thema eröffnen   Neue Antwort erstellen MGi Foren-Übersicht -> Programmierung -> XML-Datei auslesen und in Datenbank schreiben
Seite: 1, 2  Weiter
Autor Nachricht
kjutta
Threadersteller

Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Fr 25.07.2008 09:04
Titel

XML-Datei auslesen und in Datenbank schreiben

Antworten mit Zitat Zum Seitenanfang

Hallo,
ich habe eine XML-Datei, die ich mit dem DOM auslese und per ASP in eine Datenbank schreibe. Nun ist die XML-Struktur geändert worden und ich habe Probleme mit einer Schleife im XML:

Die Datei ist in folgender Struktur aufgebaut:
Code:
<daten>
   <feld1>text</feld1>
   <feld2>text</feld2>
   <feld3>text</feld3>
   <datenfeld>
      <text1>alfred</text1>
      <text2>text</text2>
      <text3>text</text3>
   </datenfeld>
   <datenfeld>
      <text1>hugo</text1>
   </datenfeld>
   <datenfeld>
      <text1>dörthe</text1>
      <text2>text</text2>
   </datenfeld>
</daten>
.....


Mein Problem ist, dass es den Knoten "datenfeld" nun mehrmals gibt. Ich habe eine Schleife angelegt - aber als Inhalt des Feldes "text1" wird immer "alfred" ausgegeben. Er durchläuft die Schleife zwar hier dreimal, aber die Werte werden nicht korrekt ausgelesen. Wo ist mein Denkfehler? * Keine Ahnung... *
Code:
Set XMLDoc = Server.CreateObject("Msxml.DOMDocument")
XMLDoc.async = False
bSuccess = XMLDoc.load(strXMLLocation)   
IF bSuccess Then

   '::::Auslesen der Tags und füllen der Variablen:::::::::::::::::::::::::::::::::::::::::::::
   Set myNodeList = XMLDoc.getElementsByTagName("daten")
   i=0
   For Each item in myNodeList

         Set myNodeListChild = myNodeList(i).getElementsByTagName("feld1")
            if not myNodeListChild.length = 0 then
               If not isNull(myNodeListChild.item(0).text) THEN
                  strFeld1 = myNodeListChild.item(0).text
               End If
            end if
         ...
         -->weiter mit allen Feldern und dann Insert-Anweisung in Datenbank
         
         Set myNodeListChild = myNodeList(i).getElementsByTagName("datenfeld")
         if not myNodeListChild.length = 0 then

            iPartsF = myNodeListChild.length
            for ic = 0 To iPartsF - 1

               Set myNodeListChild = myNodeList(ic).getElementsByTagName("datenfeld/text1")
                  if not myNodeListChild.length = 0 then
                     If not isNull(myNodeListChild.item(0).text) THEN
                        strText1 = myNodeListChild.item(0).text
                     End If
                  end if 
               ...
                                                                                --> weiter mit allen Feldern und Füllen der Variablen
               --> Hier Insert-Anweisung in Datenbank
               
               next
            end if   
            
            
                 i=i+1
   next
END IF         
  View user's profile Private Nachricht senden
bacon

Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
Verfasst Fr 25.07.2008 09:16
Titel

Antworten mit Zitat Zum Seitenanfang

Ist das Visual Basic? Sieht ja eklig aus. Ich vermute mal, der Fehler liegt hier:

Code:
1 Set myNodeListChild = myNodeList(i).getElementsByTagName("datenfeld")
2   if not myNodeListChild.length = 0 then
3     iPartsF = myNodeListChild.length
4       for ic = 0 To iPartsF - 1
5         Set myNodeListChild = myNodeList(ic).getElementsByTagName("datenfeld/text1")


In Zeile 1 speicherst du alle Datenfeler in myNodeListChild (ich würde die Variablen/Collections übrigends besser/sprechender bennen, bspw. "myDatenfeldElementCollection" anstelle von "myNodeListChild").

In Zeile 4 startest du die Schleife über die Datenfeld-Elemente. In Zeile 5 aber holst du dir jeweile den ersten Knoten aus dem ersten Datenfeld von myNodeListChild per XPath (oder nem Fake-Xpath-Ausdruck oder whatever das sein soll): getElementsByTagName("datenfeld/text1"). D.h. du iterierst zwar, holst aber dennoch immer den ersten Eintrag der Collection myNodeList. Und überschreibst dabei im Schleifen-Scope noch die Referenz auf die Collection myNodeLIstChild (die hast du ja weiter oben schon definiert).

Besser wäre, wenn du folgendes machen würdest(ist hoffentlich syntaktisch richtig):

Code:
Set myTextElementCollection = myNodeListChild(ic)......


anstelle von
Code:

Set myNodeListChild = myNodeList(ic).....
  View user's profile Private Nachricht senden
Anzeige
Anzeige
kjutta
Threadersteller

Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Fr 25.07.2008 09:32
Titel

Antworten mit Zitat Zum Seitenanfang

Hi bacon,
ja, Du hast Recht mit der Benennung - sollte ich mir angewöhnen.
Ich habe jetzt den Code abgewandelt - leider bekomme ich jetzt aber gar keine Ergebnisse mehr.
Code:
         Set myFRList = myNodeList(i).getElementsByTagName("datenfeld")
            if not myFRList.length = 0 then

            iPartsF = myFRList.length
            for ic = 0 To iPartsF - 1

               Set myFRCollection  = myFRList(ic).getElementsByTagName("datenfeld/text1")
                  if not myFRCollection.length = 0 then
                     If not isNull(myFRCollection.item(0).text) THEN
                        strText1 = myFRCollection.item(0).text
                        Response.write "strText1: "& strText1 &"<br>"
                     End If
                  end if


Du sagst, mein Code ist eklig? Und ich verwende Fake-Path-Code? Au weia!
Soll genau heissen? Was kann ich besser machen? Lächel
Das ist mein Erstlingswerk und ich bin da ohne Wissen so ins kalte Wasser geworfen worden. Das habe ich mir so zusammengegoogled Lächel
  View user's profile Private Nachricht senden
l'Audiophile

Dabei seit: 16.09.2004
Ort: Berlin
Alter: 43
Geschlecht: Männlich
Verfasst Fr 25.07.2008 09:35
Titel

Antworten mit Zitat Zum Seitenanfang

Liest du eigentlich das was Bacon schreibt? Du liest immer noch nur den ersten „Datenfeld”-Knoten aus. *zwinker*
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
kjutta
Threadersteller

Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Fr 25.07.2008 09:39
Titel

Antworten mit Zitat Zum Seitenanfang

öhh.... ja, aber da scheint wohl dann "lesen" und "verstehen" auseinander zu gehen Lächel

Set myFRCollection = myFRList(ic).getElementsByTagName("datenfeld/text1")

In myFRList stehen doch alle "datenfeld"-Daten. Und mit dem counter ic spreche ich je nach Stand der Schleife doch das erste oder zweite etc. an. Nein?
  View user's profile Private Nachricht senden
kjutta
Threadersteller

Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Fr 25.07.2008 09:43
Titel

Antworten mit Zitat Zum Seitenanfang

oh wartet, ich verstehe (hoffe ich) - das liegt an der - wie genannt - Fake-Path-Geschichte?

So muss es korrekt heissen?
Set myFRCollection = myFRList(ic).getElementsByTagName("text1")


Habt ihr mir der Links bzw. Buchtipps zu dem Thema wo ich mich einlesen könnte?
  View user's profile Private Nachricht senden
l'Audiophile

Dabei seit: 16.09.2004
Ort: Berlin
Alter: 43
Geschlecht: Männlich
Verfasst Fr 25.07.2008 09:45
Titel

Antworten mit Zitat Zum Seitenanfang

kjutta hat geschrieben:

In myFRList stehen doch alle "datenfeld"-Daten.


Mag letztendlich sein aber mit „myNodeListChild.item(0).text” bekommst du trotzdem nur den ersten „Arraywert” und somit Alfred.
  View user's profile Private Nachricht senden Website dieses Benutzers besuchen
kjutta
Threadersteller

Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht: Weiblich
Verfasst Fr 25.07.2008 10:50
Titel

Antworten mit Zitat Zum Seitenanfang

Vielen Dank, ihr beiden - ich habe es jetzt hinbekommen.

Habt ihr mir denn vielleicht Link- oder Buchtipps für das Thema?
  View user's profile Private Nachricht senden
 
Ähnliche Themen Class auslesen und in eine neue Datei schreiben.
[PHP/MySQL] Datenbank auslesen.
Daten aus SQL Datenbank auslesen
Anführungszeichen in Datenbank schreiben
GalerieScript mit XML Datenbank schreiben?
Daten aus Datenbank auslesen (unbekannte Spalten)
Neues Thema eröffnen   Neue Antwort erstellen Seite: 1, 2  Weiter
MGi Foren-Übersicht -> Programmierung


Du kannst keine Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum nicht antworten.
Du kannst an Umfragen in diesem Forum nicht mitmachen.