Avatar billede jacand Nybegynder
09. september 2007 - 15:10 Der er 17 kommentarer og
1 løsning

Fra XML til mysqldatabase

Jeg har lige brug for lidt hjælp til XML :-)

Når jeg sender en SMS gennem en gateway får jeg dette svar tilbage, men hvordan får jeg trukket RECIPIENT,RESULT,PROCESSINGTIME ud så jeg kan sætte det ind i min mysql database?


  <?xml version="1.0" encoding="iso-8859-1" ?>
- <ROOT>
  <RECIPIENT>4512345678</RECIPIENT>
  <BILLINGCODE>0000</BILLINGCODE>
  <IDTABLE>1698917</IDTABLE>
  <OADC>None</OADC>
  <SAPID>484</SAPID>
  <ROUTE>premium</ROUTE>
  <RESULT>1 meddelelse(r) afsendt</RESULT>
  <PROCESSINGTIME>0.00617003</PROCESSINGTIME>
  <VERSION>4.01</VERSION>
  </ROOT>
Avatar billede arne_v Ekspert
09. september 2007 - 18:36 #1
Du læser teksten ind i et XMLDOM dokument og fisker felterne ud med
GetElementsByTagName eller SelectSingleNode.
Avatar billede arne_v Ekspert
09. september 2007 - 18:39 #2
utestet:

Set doc = Server.CreateObject("Microsoft.XMLDOM")
doc.Async = False
doc.LoadXml(xmlstr)
recipient = doc.SelectSingleNode("//ROOT/RECIPIENT").Text
result = doc.SelectSingleNode("//ROOT/RESULTT").Text
processingtime = doc.SelectSingleNode("//ROOT/PROCESSINGTIME").Text
Avatar billede jacand Nybegynder
09. september 2007 - 19:56 #3
Jeg bruger denne kode for at få ovenstående svar tilbage hvordan få jeg indlæs det i din kode?

surl = "https://gw.comsms.dk/Sms/?msg=" & rs("tekst") & "&rec=" & rs("mobilnr") & "&sapid=xxx&password=xxxx&bc=0000&oadc=xxxxxxxx&route=General"
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
Set objXMLDOM = Server.CreateObject("Microsoft.XMLDOM")
objXMLDOM.async = false
Call objXMLHTTP.Open("GET", surl, False)
objXMLHTTP.Send
Avatar billede arne_v Ekspert
09. september 2007 - 20:02 #4
stadig aldeles utestet:

objXMLDOM.LoadXml(objXMLHTTP.Response)
recipient = objXMLDOM.SelectSingleNode("//ROOT/RECIPIENT").Text
result = objXMLDOM.SelectSingleNode("//ROOT/RESULTT").Text
processingtime = objXMLDOM.SelectSingleNode("//ROOT/PROCESSINGTIME").Text
Avatar billede jacand Nybegynder
09. september 2007 - 20:21 #5
Den gir: Object doesn't support this property or method: 'objXMLHTTP.Response'
Jeg prøvede at rette den til objXMLDOM.LoadXml(objXMLHTTP.ResponseXML) men den gir: Type mismatch: 'objXMLDOM.LoadXml'
og objXMLDOM.LoadXml(objXMLHTTP.Responsetext) gir: Object required: 'objXMLDOM.SelectSingleNode(...)'
Avatar billede thesurfer Nybegynder
09. september 2007 - 20:32 #6
jacand> Jeg vil foreslå, at du lige læser nogle artikler/guides om området..

F.eks.: "Server-Side XML in ASP" - http://www.15seconds.com/issue/990527.htm

Søgning på Google: http://www.google.com/search?q=asp+Microsoft.XMLDOM
Avatar billede jacand Nybegynder
09. september 2007 - 21:03 #7
thesurfer> Jeg har brugt det meste af eftermiddagen på at søge på exp og google. men jeg kan ikke lige finde noget der kan bruges til mit problem, enter er det hvis man henter en XML fil eller åbner den på serveren.
Den enste måde jeg har kunnet få noget tekst ud er ved otekst = objXMLHTTP.Responsetext, som ikke er særlig brugbar når det skal ind i en database :-)
Avatar billede thesurfer Nybegynder
09. september 2007 - 21:22 #8
hehe.. "enter er det hvis man henter en XML fil eller åbner den på serveren"

Hvad tror du at din kode gør..? :-)

Du kontakter jo "https://gw.comsms.dk" for at få "filen"..

Den returnerer jo netop "en fil" i form af en streng..

Det er samme kode/funktionalitet..
Avatar billede thesurfer Nybegynder
09. september 2007 - 21:24 #9
Læs lige http://www.15seconds.com/issue/990527.htm igennem..

Artiklen er lidt lang, fordi alle skal kunne være med fra starten..

Meningen med artiklen er ikke en hurtig løsning, men viden så man kan lære det..

Så det tager nok lidt tid at komme igennem den.. :-)
Avatar billede arne_v Ekspert
09. september 2007 - 21:38 #10
Følgende demo virker hos mig:

<%
url = "http://localhost/simulate.xml"
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
Call objXMLHTTP.Open("GET", url, False)
Call objXMLHTTP.Send()
xml = objXMLHTTP.ResponseText
Set objXMLDOM = Server.CreateObject("Microsoft.XMLDOM")
objXMLDOM.Async = false
objXMLDOM.LoadXml(xml)
recipient = objXMLDOM.SelectSingleNode("//ROOT/RECIPIENT").Text
result = objXMLDOM.SelectSingleNode("//ROOT/RESULT").Text
processingtime = objXMLDOM.SelectSingleNode("//ROOT/PROCESSINGTIME").Text
Response.Write("INSERT INTO t VALUES(" & recipient & ",'" & result & "'," & processingtime & ")")
%>
Avatar billede thesurfer Nybegynder
09. september 2007 - 21:42 #11
arne_v> Husk lige at fjerne objekterne igen (i omvendt rækkefølge af oprettelsen):

Set objXMLDOM = nothing
Set objXMLHTTP = nothing
Avatar billede olebole Juniormester
09. september 2007 - 21:49 #12
<ole>

Arne >> Er der en speciel årsag til, du bruger XMLDOM-objektet - i stedet for at bruge XMLHTTP-objektets reponseXML direkte?

/mvh
</bole>
Avatar billede arne_v Ekspert
09. september 2007 - 21:52 #13
thesurfer>

Det er nok en god ide.
Avatar billede arne_v Ekspert
09. september 2007 - 21:54 #14
olebole>

Ikke specielt.

Jeg har sakset XML parse delen fra noget kode jeg havde på lager og flettet det
sammen med spørgers HTTP kode.
Avatar billede arne_v Ekspert
09. september 2007 - 21:57 #15
Med ResponseXml bliver det:

<%
url = "http://localhost/simulate.xml"
Set objXMLHTTP = Server.CreateObject("Microsoft.XMLHTTP")
Call objXMLHTTP.Open("GET", url, False)
Call objXMLHTTP.Send()
Set objXMLDOM = objXMLHTTP.ResponseXml
recipient = objXMLDOM.SelectSingleNode("//ROOT/RECIPIENT").Text
result = objXMLDOM.SelectSingleNode("//ROOT/RESULT").Text
processingtime = objXMLDOM.SelectSingleNode("//ROOT/PROCESSINGTIME").Text
Response.Write("INSERT INTO t VALUES(" & recipient & ",'" & result & "'," & processingtime & ")")
Set objXMLDOM = Nothing
Set objXMLHTTP = Nothing
%>
Avatar billede jacand Nybegynder
09. september 2007 - 22:35 #16
arne_v>

Den første virker :-)
Den sidst giver: Object required: 'objXMLDOM.SelectSingleNode(...)'

laver du lige et svar?
Avatar billede arne_v Ekspert
09. september 2007 - 22:51 #17
svar

den sidste virker nu også hos mig
Avatar billede jacand Nybegynder
09. september 2007 - 23:16 #18
Det kan måske være fordi min server ikke har fået installeret alle de sidste opdateringer fra M$ endnu. jeg prøver lige det sidst når jeg har fået opdateret den helt.

Tusind tak for hjælen.
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