Im experiencing strange xml transform problems

F

frustratedcoder

When I call the transformnode on my xml object like this:
response.write xmlobj.transformnode(xsl) I get the actual xsl sent to
the browser.

Here is my code:

<%@LANGUAGE="VBSCRIPT"%>

<%
Dim xmlhttp, xsldoc, xmldoc
set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.open "GET", "http://some-server.com/xmlfile", false
xmlhttp.send

set xsldoc = Server.CreateObject("Microsoft.XMLDOM")
xsldoc.async = false
xsldoc.load(Server.MapPath("stylesheet.xsl"))

set xmldoc = Server.CreateObject("Microsoft.XMLDOM")
xmldoc.async = false
xmldoc.loadXML(xmlhttp.responseText)

response.write xmldoc.transformNode(xsldoc)
%>

No error message is sent back from the object, I just get the xsl if I
view the source.

I have tried to call a newer xml object but this appears to be the only
accessible to me on the server.
 
M

Martin Honnen

frustratedcoder wrote:

Dim xmlhttp, xsldoc, xmldoc
set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.open "GET", "http://some-server.com/xmlfile", false
xmlhttp.send

set xsldoc = Server.CreateObject("Microsoft.XMLDOM")
xsldoc.async = false
xsldoc.load(Server.MapPath("stylesheet.xsl"))

set xmldoc = Server.CreateObject("Microsoft.XMLDOM")
xmldoc.async = false
xmldoc.loadXML(xmlhttp.responseText)

Make those three lines
Set xmldoc = xmlhttp.responseXML
response.write xmldoc.transformNode(xsldoc)

Use
xmldoc.transformNodeToObject(xsldoc, Response)
instead.
Of course depending on what kind of content your XSL stylesheet creates
you need to set
Response.ContentType
appropriately.
No error message is sent back from the object, I just get the xsl if I
view the source.

There are several things that can go wrong, check
xmlhttp.status
to be 200, check whether xsldoc.load return true so that you know that
the stylesheet is well-formed.
 
F

frustratedcoder

Thank you for the reply. I changed my code into:
Dim xmlhttp, xsldoc, xmldoc
set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")
xmlhttp.open "GET", "http://www.somesite.com/xml", false
xmlhttp.send

set xsldoc = Server.CreateObject("Microsoft.XMLDOM")
xsldoc.async = false
xsldoc.load(Server.MapPath("stylesheet.xsl"))

set xmldoc = xmlhttp.responseXML

response.ContentType = "text/html"

xmldoc.transformNodeToObject xsldoc, Response

The xsl's output method is set to html, but the result is the same: I
get the xslt when I check the source.
 
B

Bob Barrows [MVP]

frustratedcoder said:
Thank you for the reply. I changed my code into:
Dim xmlhttp, xsldoc, xmldoc
set xmlhttp = Server.CreateObject("Microsoft.XMLHTTP")


You should use the "Server" version of the XMLHTTP object. Also, I usually
am a little bit more explicit in my server-side code:

set xmlhttp = Server.CreateObject("msxml2.ServerXMLHTTP")

xmlhttp.open "GET", "http://www.somesite.com/xml", false
xmlhttp.send

Don't create and load your "xsl" document until you have verified that you
have received something from your xmlhttp request. I am going to rearrange
things now
set xmldoc = xmlhttp.responseXML

First debugging step:

response.ContentType = "text/xml"
xmldoc.save Response
Response.End

If all looks well when you run the page, comment out the above lines. I
would still add something like:

If len(xmldoc.xml) > 0 then
set xsldoc = Server.CreateObject("Microsoft.XMLDOM")

set xsldoc = Server.CreateObject("msxml2.DomDocument")
xsldoc.async = false
xsldoc.load(Server.MapPath("stylesheet.xsl"))

response.ContentType = "text/html"

xmldoc.transformNodeToObject xsldoc, Response

else
response.write "No xml was returned"
end if
The xsl's output method is set to html, but the result is the same: I
get the xslt when I check the source.

Try "text/xml"

Also, if you have "on error resume next" anywhere, comment it out.

Bob Barrows
 
F

frustratedcoder

Thank you for the reply.

The msxml2.ServerXMLHTTP is not available on the server, only xmlhttp
and xmldom are available.
 
B

Bob Barrows [MVP]

frustratedcoder said:
Thank you for the reply.

The msxml2.ServerXMLHTTP is not available on the server, only xmlhttp
and xmldom are available.

Sounds as if that's the issue then. Can they install the latest version of
the MSXML Parser on the server?

In the meantime, have you tried my other debugging suggestions? What result
did you get from them?

Bob Barrows
 
M

Martin Honnen

frustratedcoder said:
The msxml2.ServerXMLHTTP is not available on the server, only xmlhttp
and xmldom are available.

What server is that? Old versions of MSXML as installed on Win 98 or
2000 do not support XSLT 1.0 at all, you need to have at least MSXML 3
(which is installed by IE 6) to do XSLT 1.0 transformations.
 
F

frustratedcoder

I called the host provider yesterday and they confirmed that this was
an error and that they would upgrade.

Thank you all for your help.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,901
Latest member
Noble71S45

Latest Threads

Top