02. september 2005 - 10:23Der 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.
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?
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...
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)...
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 :)
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>)...
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
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?
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.