Avatar billede decrypto Nybegynder
15. april 2003 - 15:51 Der er 24 kommentarer og
2 løsninger

Serverside transformation (asp)

Hejsa,

Jeg sidder og prøver at gøre mig lidt klogere på XML/XSLT, og det går ret fint. Jeg har prøvet clientside transformation, og ligeledes serverside transformation, og det har været en positiv oplevelse......lige indtil.....

Ja, de dokumenter jeg har transformeret serverside har været xml dokumenter med *.xml som extention.

Nu sidder jeg og prøver at transformere en *.asp side (kunne også være PHP) vha. xsl serverside, men det kan den ikke lide.

Jeg skriver lige min kode her:
-----------------------------------------------------------
<%@ Language=VBScript %>
<%
'Load XML
set xml = Server.CreateObject("Microsoft.XMLDOM")
xml.async = false
xml.load(server.MapPath("people.asp"))

'Load XSL
set xsl = Server.CreateObject("Microsoft.XMLDOM")
xsl.async = false
xsl.load(Server.MapPath("xhtml.xsl"))

'Transform file
Response.Write(xml.transformNode(xsl))
%>
-----------------------------------------------------------
Jeg tror problemet er at det er en asp side.
xml.load(server.MapPath("people.asp"))

Har jeg ret???? Hvordan kan jeg ellers bruge asp side (indeholdende ren xml kode) til at blive transformeret servereside.

Håber der er nogen der har et svar på hvad, der går galt, og hvad jeg skal gøre.

dEcRyPtO
Avatar billede decrypto Nybegynder
15. april 2003 - 16:29 #1
Jeg vil lige nævne at jeg bare helt enkelt har taget xml filen og omdøbt med asp som extension, så er jeg gået ind og response.write xml delen ud istedet.

Det burde jo virke.
Avatar billede getalife Nybegynder
15. april 2003 - 17:35 #2
nøøh.. du skal også gøre siden opmærksom på at den skal opføre sig som en XML side :)
Avatar billede Slettet bruger
15. april 2003 - 17:41 #3
Du kan ikke hente en ASP side med Server.MapPath() - den omsætter stien til en lokal sti med drevbogstav, f.eks.: "E:\web\people.asp" - prøv at åbne en ASP side sådan, og su vil opdage hvad det betyder, når WebServeren ikke preprocesserer ASP koden...

Du skal loade filen vha. HTTP - istedet for XMLDOM objektet skal du bruge ServerXMLHTTP...

/CS
Avatar billede Slettet bruger
15. april 2003 - 17:44 #4
Et hurtigt eksempel (tyvstjålet fra noget der hedder "Internet"):

<%@ Language="VBScript" %>
<%
Dim objSvrHTTP
Dim PostData

Set objSvrHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
objSvrHTTP.open "GET", "http://www.domain.dk/people.asp", false
objSvrHTTP.send
Response.Write objSvrHTTP.responseText
%>

/CS
Avatar billede getalife Nybegynder
15. april 2003 - 17:47 #5
Det er vel kun hvis det er fra et eksternt site??
(Man kan også bruge andre komponenter såsom ASPTear)
Avatar billede getalife Nybegynder
15. april 2003 - 17:50 #6
Hnm.. det hedder vel: "Det er vel kun hvis siden ligger eksternt"
Avatar billede Slettet bruger
15. april 2003 - 17:59 #7
Det er ligegyldigt om siden ligger eksternt eller ej - hvis du ikke henter en ASP side via en WebServer, udføres script i siden ganske enkelt ikke...

Ja - ASPTear kan også benyttes, men ServerXMLHTTP objektet kan lave POST og GET med XML direkte til og fra XML Objekter...

/CS
Avatar billede getalife Nybegynder
15. april 2003 - 19:25 #8
Det er jo heller ikke det jeg mener, din knallert... :)
Selvfølgelig skal man bruge en webserver.. men det er ikke nødvendigt at bruge diverse komponenter hvis XML-filen ligger på samme server som den bliver kaldt fra (test/noget.xml)
Avatar billede decrypto Nybegynder
15. april 2003 - 21:38 #9
Ja, min fil ligger på samme server faktisk sammen med xsl filen. Fik jeg et svar jeg kunne bruge. ---> getalife kan jeg ikke bruge min eksisterende kode, med et par fix fakserier????
Avatar billede Slettet bruger
15. april 2003 - 23:28 #10
Hehe - hvad ved du om min knallert? :-)

Vi snakker forbi hinanden - du referer til en XML fil på samme server - jeg (og Mr. "decrypto") refererer til en ASP fil (der genererer XML) på samme server - det får du bare ikke til at spille uden komponent...

/CS
Avatar billede getalife Nybegynder
16. april 2003 - 00:49 #11
greystate.. hvis man i asp'en skriver at det skal opfattes som en XML (kan ikke lige huske hvad det er.. contentype måske?)
Jeg må indrømme at jeg er i tvivl om jeg selv (da jeg gjorde det for et par år siden) includede en fil eller oprettede "XMLen" som en variabel på samme side.

Nå men... decrypto.. du kan som et lille check, udskrive din xml med følgende:
Response.Write(xml.xml)
Den har reddet mig mange gang hvor jeg ikke vidste om der kom noget xml output ;)
Avatar billede decrypto Nybegynder
16. april 2003 - 10:23 #12
getalife a en smule ret med Response.ContentType = "text/xml", men den har bare ikke virket. Jeg prøver lige at response.write xml'en. Det er sjovt for hvis jeg kalder min xml.asp side, så viser browseren helt rigtigt et xml dokument, men når jeg prøver at transformere den serverside, så sker der nada.

dEcRyPt0
Avatar billede Slettet bruger
16. april 2003 - 10:48 #13
... fordi XML parseren loader vha. Server.MapPath(), som "bare" åbner dokumentet (ala Notepad) og derfor får et XML dokument der indholder tags som "<% Response.Write(blablabla) %>", hvilket ikke er XML.

Igen: Hvis din XML bliver genereret vha. ASP, skal siden loades vha. HTTP.

/CS
Avatar billede decrypto Nybegynder
16. april 2003 - 13:51 #14
----> greystate...jeg er begyndt at forstå dit forslag. Vil det sige hvis jeg sidder på en anden server og kalder denne xml.asp på en tredje server, så kan jeg vha. HTTP loade filen og transformere den på min egen server sådan som jeg vil have den???? Evt. omdanne den til SQL som så kan opdatere min database med transformering af xml.asp som ligger på en server langt væk fra mig.
Avatar billede Slettet bruger
16. april 2003 - 14:11 #15
Yep - XMLObject() (http://greystate.dk/xmlobject/) kan endda klare the nitty-gritty for dig...

/CS
Avatar billede decrypto Nybegynder
16. april 2003 - 14:34 #16
Ok.

Nu har jeg prøvet dette her...

------------------------------ Kode ----------------------------------------
    Dim objSvrHTTP
    Dim PostData
   
    Set objSvrHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
    objSvrHTTP.open "GET", "http://xxxxx/FA00EPP/xml/data_udtraek.asp", false

    objSvrHTTP.send
    Response.Write objSvrHTTP.responseText
------------------------------ Kode ----------------------------------------

Men hvor siger jeg hvilken xslt den skal bruge. Lige nu får jeg denne fejl.

msxml4.dll error '80072ee2'
The operation timed out
/FA00EPP/xml/people.asp, line 26

Og linje 26 i people.asp er:
objSvrHTTP.send
Avatar billede decrypto Nybegynder
16. april 2003 - 14:37 #17
Skal min xsl stå i den asp side som i virkeligheden er xml dokument? Men så er det jo ligsom almindelig css, og transformation vil være klientside.

dEcRyPtO
Avatar billede Slettet bruger
16. april 2003 - 15:06 #18
Du kan bruge responseXML istedet for responseText, f.eks.:

' load med ServerXMLHTTP ...

Set objXML = Server.CreateObject("MSXML2.DOMDocument.4.0")
Set objXSL = Server.CreateObject("MSXML2.DOMDocument.4.0")
...
objXML.load(objSvrHTTP.responseXML)
objXSL.load(Server.MapPath(XSL_FILE))
...
' Transformer her...

/CS
Avatar billede decrypto Nybegynder
16. april 2003 - 15:22 #19
NU ser min kode således ud:
----------------------------------- Kode ----------------------------------
    Dim objSvrHTTP
    Dim PostData
   
    Set objSvrHTTP = Server.CreateObject("Msxml2.ServerXMLHTTP.4.0")
    objSvrHTTP.open "GET", "http://fdb002/FA00EPP/xml/people.asp", false
   
    Set objXML = Server.CreateObject("MSXML2.DOMDocument.4.0")
    Set objXSL = Server.CreateObject("MSXML2.DOMDocument.4.0")

    objSvrHTTP.send
   
    'load med ServerXMLHTTP ...
    objXML.load(objSvrHTTP.responseXML)
    objXSL.load(Server.MapPath(xhtml.xsl))
----------------------------------- Kode ----------------------------------
Hvad bruger jeg:
PostData til?
objSvrHTTP.send til?

Og jeg får denne fejl.

Microsoft VBScript runtime error '800a01a8'
Object required: 'xhtml'
/FA00EPP/xml/people.asp, line 33

Linje 33 svarer til:
objXSL.load(Server.MapPath(xhtml.xsl))
Avatar billede decrypto Nybegynder
16. april 2003 - 15:28 #20
Hovsa,

objSvrHTTP.open "GET", "http://fdb002/FA00EPP/xml/people.asp", false

er skiftet til
objSvrHTTP.open "GET", "http://fdb002/FA00EPP/xml/data_udtraek.asp", false

hvor 'data_udtraek.asp' jo er mit xml dokument. Mens denne kode står i people.asp siden.

Det begyndt at blive lidt langhåret.

Så skriver lige hvilke filer jeg med at gøre:
1. data_udtraek.asp //Indeholder xml koden, bare udskrevet vha. vbscript
2. xhtml.xsl //Style sheet filen der skulle transformere indholdet af data_udtraek til noget html kode.
3. people.asp //Er den side brugeren skal kalde og hvori jeg gerne vil have at transformationen af data_udtraekket 'trigges'.

Håber det giver et lidt klarer billede af mit lille xml/xslt serverside eksperiment.

dEcRyPtO
Avatar billede Slettet bruger
16. april 2003 - 15:58 #21
1. PostData smider du bare væk. (Som sagt var det cut'n'paste :-) )
2. objSvrHTTP.send henter XML filen vha. HTTP - (ja, det er "data_udtraek.asp" du skal bruge.)
3. Fejlen i linje 33: Du skal lige have et par pingelinger rundt om filnavnet - "xhtml.xsl" :-)

/CS
Avatar billede decrypto Nybegynder
16. april 2003 - 16:01 #22
Ok, men med pingelingerne sat på så får jeg ingen fejl men bare en blank side nu.
Avatar billede Slettet bruger
16. april 2003 - 16:08 #23
Kanon - så virker det! :-)

Nu kan det jo så være at dit XSLT stylesheet ikke fanger de rigtige elementer osv. - prøv at smide en <p>Det virker!</p> ind i stylesheet'ets rod-template - f.eks.:

<xsl:template match="/">
  <p>Det virker!</p>
  <p>Der er <xsl:value-of select="count(*)" /> elementer i XML filen</p>
</xsl:template>

/CS
Avatar billede Slettet bruger
16. april 2003 - 16:08 #24
ups: count(//*)

/CS
Avatar billede decrypto Nybegynder
16. april 2003 - 16:17 #25
Jamen xsl virker, for når jeg transformerede clientside, så gjorde den det rigtigt, nu har jeg slet ikke pillet ved xsl filen. Jeg prøver lige alligevel dit forslag.

/dEcRyPtO
Avatar billede decrypto Nybegynder
22. april 2003 - 14:35 #26
Jeg fik løst problemet selv efter lidt læsning her og der.

Men tak for hjælpen anyway.
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