Autor |
Nachricht |
kjutta
Threadersteller
Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 25.07.2008 09:04
Titel XML-Datei auslesen und in Datenbank schreiben |
|
|
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?
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 |
|
|
|
|
|
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 25.07.2008 09:16
Titel
|
|
|
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)..... |
|
|
|
|
|
Anzeige
|
|
|
kjutta
Threadersteller
Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 25.07.2008 09:32
Titel
|
|
|
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?
Soll genau heissen? Was kann ich besser machen?
Das ist mein Erstlingswerk und ich bin da ohne Wissen so ins kalte Wasser geworfen worden. Das habe ich mir so zusammengegoogled
|
|
|
|
|
l'Audiophile
Dabei seit: 16.09.2004
Ort: Berlin
Alter: 43
Geschlecht:
|
Verfasst Fr 25.07.2008 09:35
Titel
|
|
|
Liest du eigentlich das was Bacon schreibt? Du liest immer noch nur den ersten „Datenfeld”-Knoten aus.
|
|
|
|
|
kjutta
Threadersteller
Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 25.07.2008 09:39
Titel
|
|
|
öhh.... ja, aber da scheint wohl dann "lesen" und "verstehen" auseinander zu gehen
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?
|
|
|
|
|
kjutta
Threadersteller
Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 25.07.2008 09:43
Titel
|
|
|
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?
|
|
|
|
|
l'Audiophile
Dabei seit: 16.09.2004
Ort: Berlin
Alter: 43
Geschlecht:
|
Verfasst Fr 25.07.2008 09:45
Titel
|
|
|
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.
|
|
|
|
|
kjutta
Threadersteller
Dabei seit: 01.02.2006
Ort: -
Alter: -
Geschlecht:
|
Verfasst Fr 25.07.2008 10:50
Titel
|
|
|
Vielen Dank, ihr beiden - ich habe es jetzt hinbekommen.
Habt ihr mir denn vielleicht Link- oder Buchtipps für das Thema?
|
|
|
|
|
|
|
|
Ä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)
|
|