|
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 |