• Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 817
  • Last Modified:

Passing parameters from ASP to XML/XSL and filtering data.

I have an ASP Page that displays the files from a directory on unix box. I get the entire list of files in that directoty and displays it on the browser. What I want to achieve is to get an input from user (on ASP page, and it will be a letter A, B, C etc..) and then pass this value to the XSL and then it should only display the files beginning from this letter.I have not worked with passing parameters or filtering data dynamically.

My XML Code
------------------------
Set req = Server.CreateObject("MSXML2.ServerXMLHTTP")
Set xml = Server.CreateObject("MSXML2.DOMDocument")
Set resDoc = Server.CreateObject("MSXML2.DOMDocument")
Set xslDoc = Server.CreateObject("MSXML2.DOMDocument")
req.open "POST", service, false
req.setRequestHeader "Content-Type", "text/xml; charset=utf-8"
req.setRequestHeader "SOAPAction", " "
ret = req.send(doc)
xml.async = False
xml.loadXML req.responseText
resDoc.async = False
resDoc.loadXML dirRet.firstChild.text
xslDoc.async = False
xslDoc.load(Server.MapPath("/test/files2.xsl"))

Response.Write resDoc.transformNode(xslDoc)

My XSLT Code: (file2,xsl)
------------------------------------
<table border="1" cellpadding="2" cellspacing="0">
<tr>
      <td class="colheading">File Name</td>
</tr>
<xsl:for-each select="file[@type = 'f']">
    <xsl:sort select="@name" />
    xsl:apply-templates select="."/>
   </xsl:for-each>
</table>

<xsl:template match="file">
<tr>
      <td class="reportdetail">
      <a>
            <xsl:attribute name="href">javascript:void(0);</xsl:attribute>
            <xsl:attribute name="onclick">javascript:showFile('<xsl:value-of select="@path" />'); return false;</xsl:attribute>
            <xsl:value-of select="@name" />
      </a>
      </td>
</tr>
</xsl:template>
</xsl:stylesheet>
0
nazzie303
Asked:
nazzie303
  • 4
  • 3
1 Solution
 
Geert BormansInformation ArchitectCommented:
For passing parameters you need a template processor instead of an ordinairy transform
Here is an example

<% @Language = "VBScript" %>
<%
Dim oXML
Set oXML = Server.CreateObject("MSXML2.DOMDocument.4.0")
Dim oXSL
Set oXSL= Server.CreateObject("Msxml2.FreeThreadedDOMDocument.4.0")
Dim oTmpl
Set oTmpl= Server.CreateObject("Msxml2.XSLTemplate.4.0")
Dim oProc

oXSL.async = false
oXSL.load Server.MapPath("listing.xsl")

oXML.validateOnParse = true
oXML.load Server.MapPath("listing.xml")

oTmpl.stylesheet = oXSL

Set oProc= oTmpl.createProcessor()
oProc.input = oXML
 
oProc.addParameter "paramName","paramValue"
oProc.output = Response
oProc.transform()

%>

I believe you can work your code into this example

For the parameter to be accessible in the XSL,
you need to add a global parameter with the same name,
like this

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:parameter name="paramName" />

hope this helps

cheers

Geert


0
 
nazzie303Author Commented:
I used the following in my xml:
-------
------
proc.addParameter "fname", "A000263.txt"
proc.output = Response
proc.transform()


And the following in my XSL:
 (i havent even used the parameter in xsl., just trying to see if it the data displays)
--------------
---------------
<xsl:param name="fname"></xsl:param>

And instead of the data displayed, I get the following Error:
??F
0
 
Geert BormansInformation ArchitectCommented:
you did not post the Error message, unless it really only is "??F"

make sure the parameter is defined at the highest level
0
Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

 
nazzie303Author Commented:
Well my main ASP page has div (or frames) and one of the frames is where the list of files is displayed. If I use the method you provided I get the "??F" displayed. I tried finding if this is a valid error, but I cant seem to put a finger on it. Seems like the XML does not like the way parameters are added.
And yes, I defined the parmeter at the highest level in the XSL
0
 
Geert BormansInformation ArchitectCommented:
Of course this is very hard to debug from a distance.
I usually work my way up, first checking if the files are loaded correctly
(outputting an oXML.xml)

In my example I used the msxml4 activeX objects,
I hope you changed that, or have msxml4 installed.
It usually is not a good idea to mix objects from different parsers

I would personally install msxml6 and use the version 6 PIDs

cheers

Geert
0
 
nazzie303Author Commented:
I guess I am much lower on the ladder for this code. So if I was not using the  msxml4, and using the older one (example:--Set xslDoc = Server.CreateObject("MSXML2.FreeThreadedDOMDocument")---)
this does not support parameters ?
0
 
Geert BormansInformation ArchitectCommented:
I think it should work using msxml3
why don't you add .3.0 to make sure it picks up the right parser?

cheers

Geert
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Get expert help—faster!

Need expert help—fast? Use the Help Bell for personalized assistance getting answers to your important questions.

  • 4
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now