Subject: [xsl] node-set returning functions and their applications From: Nic Ferrier <nferrier@xxxxxxxxxxxxxxxxxxxx> Date: 01 Oct 2003 20:52:56 +0100 |
A colleague and I were working on the following problem: we want to pass a comma separted list of values to a stylesheet and have the stylesheet extract bits of the input xml based on the values. We knew we could use str:split to find the values and then create templates from them, something like this: <xsl:param name="id_list">1,2,3,4</xsl:param> <xsl:template match="/"> <xsl:for-each select="str:split($id_list, ',')"> <xsl:variable name="the_id" select="." /> <xsl:apply-templates select="//el[@id = $the_id]" /> </xsl:for-each> </xsl:template> But we just couldn't get it to work. The node-set returned by the xpath expression in the inner apply-templates was empty. We scratched our heads for some time (and went down several blind alleys) before realising that the document context within the for-each is different to the context outside it. The fix to our problem is to take a node-set pointer from the main document into the for-each with us: <xsl:template match="/"> <xsl:variable name="the_document" select="//el" /> <xsl:for-each select="str:split($id_list, ',')"> <xsl:variable name="the_id" select="." /> <xsl:apply-templates select="$the_document[@id = $the_id]" /> </xsl:for-each> </xsl:template> We hope that Google finds this and that other people can find it in Google. Nic Ferrier http://www.tapsellferrier.co.uk XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] fo:external-graphic src=", J.Pietschmann | Thread | [xsl] XSL:FO - How to wrap non-word, Jon Allen |
RE: [xsl] fo:external-graphic src=", Ibeling, Narisa | Date | Re: [xsl] encoding ISO-8859-15 erro, J.Pietschmann |
Month |