Subject: [xsl] Fwd: Dynamic template select criteria; params & variables From: Jeni Tennison <jeni@xxxxxxxxxxxxxxxx> Date: Wed, 21 Aug 2002 14:44:43 +0100 |
[Forwarded on behalf of John Potter, who's having trouble posting to the list] ----------------------------------- Dynamic template select criteria; params & variables OK - After searching around a bit more, I've figured out that you're not allowed to create dynamic XPath expressions but that dynamic predicates are allowed... Can anyone tell me why (from the example I submitted earlier) this isn't working for me (no error but I get back all items whether they match the criteria or not. *************************** <xsl:variable name="test" select="'contains($color_criteria, @color) and contains($letter_criteria, @letter)'"/> <xsl:apply-templates select="records/record[$test]"/> *************************** Hardcoding the entire select clause works as I would think it should... <xsl:apply-templates select="records/record[contains($color_criteria, @color) and contains($letter_criteria, @letter)]"/> This has got to be a fairly routine task. Thanks. John Potter -----Original Message----- From: John Potter Sent: Monday, August 19, 2002 2:09 PM To: 'xsl-list@xxxxxxxxxxxxxxxx' Subject: Dynamic template select criteria; params & variables Hello: I've been playing around with XSLT for the past couple months with good results but have run into something that I'm having trouble getting around. Essentially, I want to be able to pass in several values as parameters and filter my output based on those values. My initial thought was to create a variable, check the parameters one by one and build the select criteria (specifically the predicates). The content of that variable would get placed in the apply-templates statement (e.g. <xsl:apply-template select="$main_select_clause"/>). I've got two problems - building the contents of the variable (I know - it's more like a constant) and then getting the apply-template to work w/ the variable (even if I build a simple variable w/ hard-coded values). Am I missing something obvious? You'll find a simplified example of what I'm trying to accomplish below. Thanks. John Potter **************************************************************** Parser Info Vendor: Microsoft Vendor URL: http://www.microsoft.com **************************************************************** xml file <?xml version="1.0"?> <records> <record num="1" letter="A" color="blue"/> <record num="2" letter="B" color="blue"/> <record num="3" letter="C" color="green"/> <record num="4" letter="D" color="yellow"/> </records> **************************************************************** xslt file <?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output method="html"/> <xsl:param name="letter_criteria" select="'B'"/> <xsl:param name="color_criteria" select="'blue'"/> <xsl:variable name="main_select_clause"/> <xsl:template match="/"> <html> <body> <table> <!-- Build Dynamic select statement - $main_select_clause --> <!-- May have no predicate, may have 1, may have more than one --> <!-- Need to check (string-length((normalize_space(criteria params)) > 0) --> <!-- $main_select_clause = "records/record" --> <!-- test length of each criteria --> <!-- append predicate if appropriate [] --> <!-- <xsl:apply-template select="$main_select_clause"/> --> <xsl:apply-templates select="records/record[contains($letter_criteria, @letter)][contains($color_criteria, @color)]"/> </table> </body> </html> </xsl:template> <xsl:template match="records/record"> <tr> <td><xsl:value-of select="@num"/></td> <td><xsl:value-of select="@letter"/></td> <td><xsl:value-of select="@color"/></td> </tr> </xsl:template> </xsl:stylesheet> **************************************************************** ---- XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Merge 2 XMLs using XSL & outp, Exide Arabellan | Thread | [xsl] SelectSingle Node, Karl Stubsjoen |
RE: [xsl] "interleaved" numbering, Andrew Welch | Date | [xsl] SelectSingle Node, Karl Stubsjoen |
Month |