webForumDet fria alternativet

Ta emot XML-dokument med MSXML

XMLur XML

6 svar · 596 visningar · startad av @nders

@ndersMedlem sedan juni 200032 969 inlägg
#1

Hej!

Jag försöker ta emot ett XML-dokument som postas till mig via HTTP. Det fungerar fint, under förutsättning att det inte finns någon dtd-referens i dokumentet. Så här ser min mottagarkod ut:

<%
set objXML= Server.CreateObject("MSXML2.DOMDocument")
objXML.setProperty "ServerHTTPRequest", True
objXML.validateOnParse = true
objXML.async = false

objXML.load (request)
objXML.save("c:\xml\test\test.xml")
%>

Just nu i ASP / VBScript alltså.

Någon med idéer?

Mvh och tpf,

UlfTMedlem sedan maj 20018 027 inlägg
#2

Själv har jag bara använt msxml för filer som redan finns på datorn. En tanke kan ju vara att strunta i att validera dokumentet. Det kanske är så att valideringen inte går igenom som den ska, när koden måste vänta på att dokumentet ska föras över. Om du vet med dig att xml-dokumenten som kommer, alltid är korrekta, finns det heller ingen anledning att validera.

@ndersMedlem sedan juni 200032 969 inlägg
#3

Jag behöver inte validera, dokumenten är redan färdigvaliderade.
Hur jag än gör blir målfilen tom.

Vi kan säga så här: Om jag i stället för att ta emot med request hämtar exakt samma dokument från disk funkar det finfint och då gör det inget om dtd-referensen finns där. Men så fort den finns med i filen som skickas så stöts det på patrull.

Jag vill helst ha möjlighet att validera efter mottagandet, även om det i detta fall inte är ett måste.

mvh

@ndersMedlem sedan juni 200032 969 inlägg
#4

För att ytterligare illustrera; följande fungerar:

set objXML= Server.CreateObject("MSXML2.DOMDocument")
objXML.resolveExternals=false
objXML.validateOnParse=false
objXML.async = false

objXML.load (Server.MapPath("1094348_ordrsp20040223_060657_671.xml"))
objXML.save("c:\xml\test\test.xml")

Följande fungerar icke:

set objXML= Server.CreateObject("MSXML2.DOMDocument")
objXML.resolveExternals=false
objXML.validateOnParse=false
objXML.async = false

objXML.load (request)
objXML.save("c:\xml\test\test.xml")

Det är samma fil som skickas, som läses in. Om jag tar bort dtd-referensen i källfilen fungerar båda.

Mvh

nikoMedlem sedan juni 20022 599 inlägg
#5

Vad är felmeddelandet? Dvs värdet på objXML.parseError.reason/errorCode direkt efter load:en?

@ndersMedlem sedan juni 200032 969 inlägg
#6

Den utskriften hade jag inte tänkt på att jag kunde kolla av, eftersom denna mottagarsida liksom körs i blindo.

När jag skickar dokumentet med dtd-referens och kört .load, får jag följande felmeddelande från parsern: XML document must have a top level element. (kod -1072896680)

Doesn't make sense to me. :)

Mvh

@ndersMedlem sedan juni 200032 969 inlägg
#7

Men hallå här.

Jag har klantat mig. I mina ivriga tester har jag klippt bort följande rader:

objXMLDoc.validateOnParse = True
objXMLDoc.async = False
objXMLDoc.setProperty "ServerHTTPRequest", True

från filen som skickar xml-dokumentet. In med dem och allt funkar.

Det är klart mottagandet går åt pipan om man inte skickar någonting... ;)

Tack för hjälpen, niko. :)

*bankar huvudet i bordet*

257 ms totalt · 3 externa anrop · v20260731065814-full.29ac60f6
136 ms — hämta forumlista (db)
118 ms — hämta statistik (db)
131 ms — hämta tråd, inlägg och bilagor (db)