Subject: RE: [xsl] Build a select list of nodes From: "Michael Kay" <michael.h.kay@xxxxxxxxxxxx> Date: Tue, 26 Nov 2002 20:23:10 -0000 |
Firstly, you need to get rid of this code: <xsl:text><OPTION VALUE = "</xsl:text> <xsl:value-of select="name()" /> <xsl:text>"></xsl:text> <xsl:value-of select="name()" /> <xsl:value-of select="$newline"/> which is trying to generate HTML as text, not as a result tree. XSLT stylesheets produce nodes in a tree, they don't produce text containing markup - that's the job of the serializer. The above should be written: <option value="{name()}"> <xsl:value-of select="name()"/> </option> Michael Kay Software AG home: Michael.H.Kay@xxxxxxxxxxxx work: Michael.Kay@xxxxxxxxxxxxxx > -----Original Message----- > From: owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx > [mailto:owner-xsl-list@xxxxxxxxxxxxxxxxxxxxxx] On Behalf Of > Moore, Simon > Sent: 26 November 2002 09:19 > To: XSL-List@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] Build a select list of nodes > > > Hi > > Another New recruit... :-) I would be grateful for any > help on this as it is my first real XSL project. > > I am trying to build a list of all the unique nodenames > available in an xml file and present it as a selectable drop > down list in an HTML page. > I am using IE 5.5 and MSXML on Windows 95. At the moment I > have all the files saved on my windows desktop so everything is local. > My problem is that when I open the HTML page, the surrounding > text and select box apprear, but there is nothing to select in the > box. If I change the output method to text I can see that my > newline has no effect at all. The listbox OPTION statements > appear as one > long line. If I put a <BR /> tag in the loop and comment out > the FORM and SELECT tags then it will print the text in the > same way as if I had > typed the HTML by hand - if I paste it into a file and test > it in the browser as a fixed page it all works perfectly. > > I searched on the Web and found that preserveWhiteSpace has > some effect on spacing but, I'm not so sure that this is the > solution. I just can't > get it to work. I'm sure that I am missing something simple. > > I have included a sample XML plus my XSL and HTML page. The > XSL, HTML/JavaScript have been patched together from > different sources (web/books). > > Many thanks > Simon. > > --------- START XML -------- > <?xml version="1.0" encoding="UTF-8"?> > <?xml-stylesheet type="text/xsl" href="./list_test.xsl"?> > <computer-list> > <computer> > <name>fred</name> > <project>fasttrack</project> > <architecture>w32-ix86</architecture> > <status>UP</status> > <diskdrives> > <drive>A</drive> > <drive>B</drive> > <drive>C</drive> > </diskdrives> > </computer> > > .... more computers are in the list .... > > </computer-list> > > --------- END XML -------- > > > --------- START XSL -------- > > <?xml version="1.0" ?> > <xsl:stylesheet > xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> > > <xsl:output method="html"/> > > <xsl:variable name="newline"> > <xsl:text> > </xsl:text> > </xsl:variable> > > <xsl:variable name="testtext"> > <xsl:text> > This is a test of the variables and it works when selected > later in the XSL. > </xsl:text> > </xsl:variable> > > <xsl:key name="elements" match="*" use="name()" /> > <xsl:template match="/"> > <HTML> > <HEAD><TITLE> > <xsl:text>Maclaren - Select The elements required</xsl:text> > </TITLE></HEAD> > <BODY> > <H1> > <xsl:text>Summary of Elements</xsl:text> > </H1> > <BR /> > <xsl:value-of select="$testtext"/> > <BR /> > <FORM> > <SELECT NAME = "eltype"> > <xsl:for-each > select="//*[generate-id(.)=generate-id(key('elements',name())[1])]"> > <xsl:sort select="name()" /> > <xsl:for-each select="key('elements', name())"> > <xsl:if test="position()=1"> > > <xsl:text><OPTION VALUE = "</xsl:text> > <xsl:value-of select="name()" /> > <xsl:text>"></xsl:text> > <xsl:value-of select="name()" /> > <xsl:value-of select="$newline"/> > > <!-- If I put BR/ here the text prints the > correct HTML text --> > </xsl:if> > </xsl:for-each> > </xsl:for-each> > </SELECT> > </FORM> > <BR /> > <xsl:text>there should be a newline after this but it doesn't > work...</xsl:text> > <xsl:value-of select="$newline"/> > <xsl:text>This line just gets concatenated to the previous > line.</xsl:text> > </BODY> > </HTML> > </xsl:template> > </xsl:stylesheet> > > > --------- END XSL -------- > > > > --------- START HTML/JAVASCRIPT -------- > <html> > <head> > <title> > XML test !! > </title> > </head> > <body> > > <SCRIPT LANGUAGE="JavaScript"> > > // Load XSL > var objXSLT = new > ActiveXObject("MSXML2.FreeThreadedDomDocument"); > objXSLT.async = false; > objXSLT.load("list_test.xsl"); > > // create a compiled XSL-object > var objCompiled = new > ActiveXObject("MSXML2.XSLTemplate"); > objCompiled.stylesheet = > objXSLT.documentElement; > > // create XSL-processor > var objXSLProc = objCompiled.createProcessor(); > > // Load XML > var objXML = new > ActiveXObject("MSXML2.FreeThreadedDomDocument"); > objXML.preserveWhiteSpace = true; > objXML.async = false; > objXML.load("tmp.xml"); > > // input for XSL-processor > objXSLProc.input = objXML; > // > objXSLProc.addParameter("NameOfYourParameter1", > "ValueOfYourParameter1"); > // > objXSLProc.addParameter("NameOfYourParameter2", > "ValueOfYourParameter2"); > // etc... > > // transform > objXSLProc.transform(); > > // display > document.write(objXSLProc.output); > </SCRIPT> > > </body> > > </html> > > --------- END HTML/JAVASCRIPT -------- > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list > > XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Build a select list of nodes, Moore, Simon | Thread | RE: [xsl] Build a select list of no, TSchutzerWeissmann |
Re: [xsl] Simple Sort Problem, Wendell Piez | Date | Re: [xsl] Simple Sort Problem, Evan Borysko |
Month |