You're forgetting that a path expression starting with "/" or "//" selects
within the document that contains the context node - which in this case is
the document constructed by the str:tokenize template. You need to create a
global variable say <xsl:variable name="root" select="/"/> and then select
relative to that: select="$root//city[text() = $ns/token/text()]".
Or better,
$root//city[. = $ns/token]"
You don't want to access the text nodes explicitly because comments or
processing instructions would stop your code working.
Michael Kay
http://www.saxonica.com/
-----Original Message-----
From: vwiswell [mailto:vwiswell(_at_)verizon(_dot_)net]
Sent: 28 March 2008 19:59
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
Subject: [xsl] using str:tokenize named template results
The str:tokenize template works beautifully (I am required to
use xslt 1.0). I am using it to split the input from a
multiple select box submitted from an html page thusly:
<xsl:variable name="inValues">
<xsl:call-template name="str:tokenize">
<xsl:with-param name="string" select="$input" />
</xsl:call-template>
</xsl:variable>
I want to loop through the tokens checking for matches in my
main input, an xml file. So I need nested for-each loops, the
outer one looping through my tokens from str:tokenize and the
inner one looping through <city>s in my doc.
The xml looks like this:
<sites>
<site>
<city>A City</city>
<institution>Axxxxx Univ.</institution>
<administers>to any student</administers>
<schedule>2 times per month</schedule>
<additional_costs>$15 admin. fee</additional_costs>
<contact_information>(123) 123-1234</contact_information>
</site>
<site>
<city>B City</city>
<institution>Bxxxx College</institution>
<administers/>
<schedule/>
<additional_costs/>
<contact_information/>
</site>
<site>
<city>C City</city>
<institution>Cxxxxx College</institution>
<administers>to any student</administers>
<schedule>1 time per month</schedule>
<additional_costs>$10 refundable deposit</additional_costs>
<contact_information>(123) 123-1234</contact_information>
</site>
...
</sites>
I'm not getting any output, so I think I have context issues,
but I'm not sure how to fix it. I don't really understand the
relationship between the str:tokenize results and my xml doc.
It seems analogous to multiple input xml docs, but I'm not
sure how to code it. This is what I have tried:
<xsl:template name="buildTable">
<xsl:param name="tokens"/>
<xsl:variable name="ns" select="msxsl:node-set($tokens)"/>
<xsl:for-each select="$ns/token">
<xsl:value-of select="text()" /><br /><!-- this works
and proves the tokens are as expected -->
<xsl:for-each select="//city[text() = $ns/token/text()]">
<xsl:sort select="city"/>
<xsl:value-of select="text()" /><br /><!-- this
produces no output -->
</xsl:for-each>
</xsl:for-each>
</xsl:template>
If I remove the token (outer) for-each, I get output, but
only for the first token (obviously). The tokens get passed
to this template just fine.
I'd really appreciate a nudge in the right direction. Thanks.
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail:
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--
--~------------------------------------------------------------------
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--