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?
loadXML() eller Load() ?
11 svar · 251 visningar · startad av Brimba
load tar en sträng och loadXML från en disk eller en WEB-server.
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?
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.
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?
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.
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.
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?
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?
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.
Jag satte oXML.async = FALSE, och nu verkar det fungera.
Ahh, såg inte ditt meddelande Ulf, men precis som du skrev. Det var async som var problemet! Perfekt Tack!