Avatar billede tblaster Nybegynder
02. september 2005 - 10:23 Der er 23 kommentarer og
1 løsning

Åbne xml side igennem asp side.

Hejsa

Jeg skal have lidt hjælp til at åbne en xml side igenem min asp side. Mit xml dokument skal åbnes med parameter, eks:
http://www.domæne.dk/test?Ms=23&bx=g2

Hvordan kan jeg læse den xml fil ind i min asp side, således at jeg kan trække de informationer ud som står i det xml dokument jeg får returneret?

Xml dokumentet som bliver læst ser således ud:
<Root><version>3.0</Version></Root>

Hvor der står nogle flere ting end bare version, men hvis jeg kan få hjælp til at få den information ud så kan jeg nok godt klarere resten selv.
Avatar billede tblaster Nybegynder
02. september 2005 - 10:37 #1
Jeg har prøvet med følgende:

Dim objSvrHTTP
Dim PostData

Set objSvrHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
objSvrHTTP.open "GET", Url, false
objSvrHTTP.send
Response.Write objSvrHTTP.responseText

Men den tekst jeg sender over bliver konverteret således at specielle tegn bliver lavet om:
æ bliver til Al
å bliver til aY (med 2 streger over y'et)

Skal jeg sende mine parameter over på en anden måde end igennem min url, eller skal jeg konverter mine tegn til et andet format eller fortælle hvilket format jeg sender i?
Avatar billede tblaster Nybegynder
02. september 2005 - 10:56 #2
Faldt over denne funktion:
Server.URLEncode()

Er den god nok til det, og får modtageren det så stadig I et format han kan læse?
Avatar billede softspot Forsker
02. september 2005 - 10:59 #3
Jeg tror det har noget med encoding at gøre (det er altid et godt sted at starte når man arbejder med XML og videresendelse af informationer :))...

Du kan se hvilken encoding din server sender XML'en med ved at udskrive/aflæse objSvrHTTP.getAllResponseHeaders. Det kan være du kan finde noget interessant information om charset og encoding deri. Dine egen encoding skal gerne passe til den encoding som XML'en har eller er der lagt op til problemer...
Avatar billede tblaster Nybegynder
02. september 2005 - 11:04 #4
Det vil jeg lige undersøge ... kan du hjælpe med delen med at læse de ting der står i xlm'en jeg åbner?
Avatar billede softspot Forsker
02. september 2005 - 11:07 #5
Det vil jeg tro, men prøv at kaste det i min retning, så må vi se hvad jeg formår... :)
Avatar billede tblaster Nybegynder
03. september 2005 - 17:25 #6
Fik løst problemet med min querystring vha Server.URLEncode(). Nu mangler jeg bare lidt hjælp til at læse fra xml siden.

For lige at ridse op igen, så ser XML dokumentet således ud:
<Root><version>3.0</Version></Root>

Og det jeg gerne vil kunne få fat i er det der står i version således at jeg kan lave en variabel der hedder:
xml_version = [3.0 fra xml siden]

"kaste det i din retning" ... forstår ikke lige hvad du mener?
Avatar billede softspot Forsker
03. september 2005 - 17:34 #7
Det er vel bare sådan et kikset slang for at hvis du vil have hjælpe skal jeg gerne prøve :)

ServerHttp returnerer såvidt jeg har forstået en responseXml som er et DOM-document. Det kan du foretage søgninger i med XPath via selectSingleNode og selectNodes. selectSingleNode returnerer en xmlnode og selectNodes returnerer en liste af nodes.

I dit tilfælde skal du jo nok bruge selectSingleNode, nogenlunde således:

set objXml = objSvrHTTP.responseXml
set objVersion = objXml.documentElement.selectSingleNode("/Root/version")
versionText = objVersion.text

versionText skulle så gerne indeholde den versionsinformation som du eftersøger (nævner lige med det samme at det er aldeles utestet, så forbehold for variationer i den faktiske brug og syntaks - men prøv dette først)...
Avatar billede tblaster Nybegynder
03. september 2005 - 17:42 #8
Det giver:
Object required: 'objXml.documentElement'
Avatar billede softspot Forsker
03. september 2005 - 17:46 #9
Prøv denne istedet:

set objVersion = objXml.selectSingleNode("/Root/version")
Avatar billede tblaster Nybegynder
03. september 2005 - 17:51 #10
Det giver:
Object required: 'objVersion'

i denne linie:
versionText = objVersion.text
Avatar billede softspot Forsker
03. september 2005 - 17:55 #11
Det er fordi den ikke finder det den søger og så returnerer den nothing. Prøv dels at udskriv indholdet af responseXML (jeg tror du kan gøre det via xml-egenskaben på objXml), dels at ændre XPath til //Root/version.

Husk at xml og søgning i xml er case-sensitiv, så det er vigtigt at få skrevet sine XPath's korrekt :)
Avatar billede tblaster Nybegynder
03. september 2005 - 18:02 #12
har pøvet det hele men det hjælper ikke ... får stadig en object required.
Avatar billede softspot Forsker
03. september 2005 - 18:07 #13
Det er nok fordi der er fejl i XML-formatet og det dermed ikke bliver indlæst i responseXML. Hvis det er det XML du har postet tidligere, så er åbnings-tag for version med små bogstaver og luknings-tag (er det virkelig noget der hedder det!?) med stort V (</Version>)...
Avatar billede tblaster Nybegynder
03. september 2005 - 18:20 #14
Det ser således ud:

Det xml retursvar jeg får lige nu er:

<?xml version="1.0" encoding="iso-8859-1" ?>
  <ROOT>
  <ERROR>Authentication failed.</ERROR>
  <PROCESSINGTIME>0.09446692</PROCESSINGTIME>
  <VERSION>3.0</VERSION>
  </ROOT>

Og min kode ser pt. således ud:
Dim objSvrHTTP
Dim PostData

Set objSvrHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
objSvrHTTP.open "GET", Url, false
objSvrHTTP.send

set objXml = objSvrHTTP.responseXml
set objVersion = objXml.selectSingleNode("/ROOT/VERSION")
versionText = objVersion.text

Og jeg får følgende fejl:
Object required: 'objVersion'

I denne linie:
versionText = objVersion.text
Avatar billede softspot Forsker
03. september 2005 - 19:09 #15
...og

set objVersion = objXml.selectSingleNode("//ROOT/VERSION")

gav heller ikke noget positivt resultat?
Avatar billede tblaster Nybegynder
03. september 2005 - 19:23 #16
Nope ... det giver:
Object required: 'objVersion'
Avatar billede softspot Forsker
03. september 2005 - 19:25 #17
Det var da ligegodt s.....!!!

Vil du ud med hvilken adresse/URL du spørger på?
Avatar billede tblaster Nybegynder
03. september 2005 - 19:32 #18
Avatar billede softspot Forsker
03. september 2005 - 20:41 #19
Jeg kan simpelthen ikke få det til at fungere med responseXML-egenskaben på objSvrHTTP-objektet, så jeg har gjort det på en anden måde. Således:

set objSvrXML = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
objSvrXML.open "GET", Url, false
objSvrXML.send

set objXml = Server.CreateObject("MSXML2.DOMDocument.3.0")
objXml.LoadXML(objSvrXML.responseText)
set objVer = objXml.selectSingleNode("//VERSION")
versionText = objVer.text
set objXml = nothing

set objSvrXML = nothing
Avatar billede tblaster Nybegynder
04. september 2005 - 12:58 #20
Det virker noget bedre, har dog lige en sidste ting jeg skal have hjælp til. Jeg skal gerne have lavet så hvis der findes en node ERROR så skal der udsendes en mail. Det umidelbare problem er bare at der kun findes ERROR noden hvis der er fejl, og det er derfor ikke altid at denne vil blive fundet. Jeg har prøvet med følgende:

set objSvrXML = Server.CreateObject("MSXML2.ServerXMLHTTP.3.0")
objSvrXML.open "GET", Url, false
objSvrXML.send

Svar = Replace(Replace(objSvrXML.responseText, """", ""), "<?xml version=1.0 encoding=iso-8859-1?>", "")

set objXml = Server.CreateObject("MSXML2.DOMDocument.3.0")
objXml.LoadXML(objSvrXML.responseText)
set objinfo = objXml.selectSingleNode("//ERROR")
Fejl = objinfo.text

' Rydder op
set objXml     = nothing
set objSvrXML     = nothing

' Ved fejl sendes en mail med oplysninger om fejlen
If Fejl & "X" <> "X" Then
    Send_email_resultat = Send_email("-", "asd@asd.com", "Fejl", Url & "<br><br>" & Svar, "asd@asd.com")
End If

Response.write Svar

Det virker fint når retur xml'et indeholder <ERROR> men når feltet ikke er en del af svaret så hænger min kode og jeg får aldrig udskrivet "Svar" på min side. Hvordan kan jeg lige lave den undersøgelse der finde ud af om <ERROR> findes i xml svaret?
Avatar billede softspot Forsker
04. september 2005 - 13:01 #21
Du skal checke på om

objXml.selectSingleNode("//ERROR")


returnerer nothing. Nogenlunde således:

if objXml.selectSingleNode("//ERROR") is nothing then
  ' så er der ikke nogen fejl-node
else
  ' så er der en fejl-node
end if
Avatar billede tblaster Nybegynder
04. september 2005 - 13:18 #22
Super. Så er den hjemme!

Mange tak for hjælpen. Smid et svar.
Avatar billede softspot Forsker
04. september 2005 - 13:22 #23
Velbekomme :)
Avatar billede softspot Forsker
04. september 2005 - 13:31 #24
Tak for point :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester