webForumDet fria alternativet

loadXML() eller Load() ?

11 svar · 251 visningar · startad av Brimba

BrimbaMedlem sedan dec. 19995 875 inlägg
#1

När jag ska läsa en XMLfil från Internet in till en textsträng skall jag då använda Load() eller loadXML()? Eller skall det lösas på annat sätt? Isåfall hur?

BeatboxMedlem sedan okt. 20013 217 inlägg
#2

load tar en sträng och loadXML från en disk eller en WEB-server.

BrimbaMedlem sedan dec. 19995 875 inlägg
#3

Det är väldigt märkligt.

Jag kör följande kod:

	Dim oXML As MSXML2.DOMDocument
	Set oXML = New MSXML2.DOMDocument
    
	If Not oXML.loadXML(url) Then
		'error
	Else
		'loaded
	End If
	
	Set oXML = Nothing

URL innehåller "http://www.myhost.com/grabXML.asp?ID=14"

När jag kör URL:en i webbläsaren ser koden helt perfekt ut, och därmed fungerar det som det ska tycker jag.
Problemet är att den alltid landar på erroravdelningen med felet "Invalid at the top level of the document". Errorcode: -1072896682

Några tips?

BeatboxMedlem sedan okt. 20013 217 inlägg
#4

urel:en som du skickar in i loadXML måste vara ett XML dokument utan fel. Om det innehåller någon form av syntaxfel eller sådant så kommer loadXML att misslyckas.

BrimbaMedlem sedan dec. 19995 875 inlägg
#5

Hur som helst verkar det vara Load() funktionen jag skall använda, men problemet är nu istället:

När jag kör:

    MsgBox oXML.xml
    MsgBox oXML.documentElement.getAttribute("Nodes")

Så fungerar det perfekt. Dock skriver inte oXML.xml ut något, men den verkar "aktivera" det, för på nästa rad så skriver du ut rätt värde.

Men om jag alltså endast kör

    MsgBox oXML.documentElement.getAttribute("Nodes")

Så får jag felmeddelande: Object variable or with block variable not set

Tips?

BeatboxMedlem sedan okt. 20013 217 inlägg
#6

MsgBox oXML.xml bör skriva ut xml-dokumentet om XML-modellen lyckats ladda korrekt. Jag tror att den misslyckas ladda faktiskt.

loadXML ska returnera TRUE om det gick bra. Testa och se om den gör det.

UlfTMedlem sedan maj 20018 027 inlägg
#7

En liten kommentar. Jag tror Brimba redan har anat det, men i alla fall:

Load() är till för att läsa in ett dokument eller url.

LoadXML() är till för en xml-sträng, typ LoadXML("<rotelement/>").

Jag såg att det var en förväxling av dessa båda.

BrimbaMedlem sedan dec. 19995 875 inlägg
#8

Problemet är som följer:

Efter att jag kör oXML.load(url), så kan jag göra följande

msgbox oXML.xml
msgbox oXML.xml

Den första msgboxen är helt tom
den andra msgboxen innehåller mitt xmldokument.

Hur kan det komma sig?

msgboxarna kommer direkt efter varann. Det verkar som att objektet måste aktiveras ?!

Någon lösning?

BrimbaMedlem sedan dec. 19995 875 inlägg
#9

Kan det ha att göra med att den inte har hunnit ladda in hela dokumentet innan jag kör msgbox första gången?

Eftersom en hemsida på internet ibland kan ha lite långa svarstider, så kanske det är det som är problemet?

Skall jag isåfall loopa i en sekund eller något, eller finns det något bättre sätt?

UlfTMedlem sedan maj 20018 027 inlägg
#10

Jag förstår inte heller varför du får det där problemet med .xml. Jag kollade lite i MSDN-dokumentationen på nedanstående länk:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmproxml.asp

Det sker tydligen en liten modifiering av dokumentet, men jag kan inte se varför det skulle bli något problem.

Kan det ha att göra med att den inte har hunnit ladda in hela dokumentet innan jag kör msgbox första gången?

Kanske det. Kolla in följande länk:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/xmlsdk30/htm/xmproasync.asp

Om du sätter .async till false borde det funka.

BrimbaMedlem sedan dec. 19995 875 inlägg
#11

Jag satte oXML.async = FALSE, och nu verkar det fungera.

BrimbaMedlem sedan dec. 19995 875 inlägg
#12

Ahh, såg inte ditt meddelande Ulf, men precis som du skrev. Det var async som var problemet! Perfekt Tack!

127 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
125 ms — hämta tråd, inlägg och bilagor (db)