Subject: Re: [xsl] Filter by multiple nodes w/ different values From: Terry Badger <terry_badger@xxxxxxxxx> Date: Wed, 20 Jan 2010 13:05:45 -0800 (PST) |
Sharon, Try this xsl on your sample after putting a <wrapper><wrapper/> tag around it. You can change the copy-of to whatever you want. Terry <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0"> <xsl:template match="/wrapper"> <xsl:apply-templates/> </xsl:template> <xsl:template match="Row"/> <xsl:template match="Row[Portal_Only = 'Yes']"> <xsl:if test="Role = 'Manager'"> <h1> <a name="contents"> <xsl:text>Manager</xsl:text> </a> </h1> <xsl:copy-of select="Process | Where_can_I"/> </xsl:if> <xsl:if test="Role = 'Employee'"> <h1> <a name="contents"> <xsl:text>Employee</xsl:text> </a> </h1> <xsl:copy-of select="Process | Where_can_I"/> </xsl:if> </xsl:template> </xsl:stylesheet> ________________________________ From: "Sharon_Harris@xxxxxxxxxxxxxxxxxxxx" <Sharon_Harris@xxxxxxxxxxxxxxxxxxxx> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx Sent: Wed, January 20, 2010 10:27:28 AM Subject: [xsl] Filter by multiple nodes w/ different values Hi, I am trying to pull data based on the values for different nodes. These values will be different as well. I have tried using for-each w/ multiple conditions and then using a value-of statement but that only produced "true" instead of the data (the conditions had been met). I tried using an if statement w/ multiple conditions and the using apply-templates but once the condition was met, then all data was pulled. I tried using multiple keys but only 1 key was executed. Here's the XML snippet. I want to output only Row data if Portal_Only=Yes and Role=Manager. I am outputting the data into a table and there will be a table for each Role value (such as Manager, Employee, etc.) and each table will only contain data for that Role value and only if Portal_Only=Yes. <Row> <Role>Manager</Role> <Process>Manage my employee's general employee information</ Process> <Where_can_I>Add/Change an employee's union contract dates</ Where_can_I> <Where_can_I_do_this_in_the_backoffice>File, Setup, Codes, Labor Unions</Where_can_I_do_this_in_the_backoffice> <Where_can_I_do_this_on_the_Portal>NA</ Where_can_I_do_this_on_the_Portal> <Portal_Only>No</Portal_Only> <Backoffice_Only>Yes</Backoffice_Only> </Row> <Row> <Role>Employee</Role> <Process>Manage my personal information</Process> <Where_can_I>Select a payroll related indicator</Where_can_I> <Where_can_I_do_this_in_the_backoffice>Employee, View/Edit, Status</Where_can_I_do_this_in_the_backoffice> <Where_can_I_do_this_on_the_Portal>My Team, My Employees, select an employee, Personal, Status/Key Dates, Status History</ Where_can_I_do_this_on_the_Portal> <Portal_Only>Yes</Portal_Only> </Row> <Row> <Role>Manager</Role> <Process>Manage my employee's general employee information</ Process> <Where_can_I>iew/Add/Change/Delete an employee's awards and recognition information</Where_can_I> <Where_can_I_do_this_in_the_backoffice>Employee, View/Edit, Status</Where_can_I_do_this_in_the_backoffice> <Where_can_I_do_this_on_the_Portal>My Team, My Employees, select an employee, Personal, Status/Key Dates, Status History</ Where_can_I_do_this_on_the_Portal> <Portal_Only>Yes</Portal_Only> </Row> <Row> <Role>Manager</Role> <Process>Manage my employee's career development information</ Process> <Where_can_I>Take notes on an employee's current status and status history</Where_can_I> <Where_can_I_do_this_in_the_backoffice>Employee, View/Edit, Status</Where_can_I_do_this_in_the_backoffice> <Where_can_I_do_this_on_the_Portal>NA</ Where_can_I_do_this_on_the_Portal> <Portal_Only>Yes</Portal_Only> <Backoffice_Only>No</Backoffice_Only> </Row> Here's the XSL snippet. This template creates the table and is called later on in the stylesheet. I am creating multiple HTML files from 1 XML file as I not only want to create an output containing tables for each Role value if Portal_Only=Yes but I also create separate output/HTML files per Role value that contain all the data for that Role value though this latter output I have succeeded in creating. At the point I am creating the HTML file for former output is when I call the template below. <xsl:template name="TasksProcessesWebTable"> <xsl:if test="'/Row/Portal_Only[contains(., $Yes)]' and 'Root/Row/Role[contains(., $Manager)]'"> <h1> <a name="contents"> <xsl:text>Manager</xsl:text> </a> </h1> </xsl:if> <xsl:if test="'/Row/Portal_Only[contains(., $Yes)]' and 'Root/Row/Role[contains(., $Employee)]'"> <h1> <a name="contents"> <xsl:text>Employee</xsl:text> </a> </h1> </xsl:if> <xsl:call-template name="SortTableNote"/> <table class="sortable" width="95%" border="1" cellpadding="5" id="sortabletableManager"> <xsl:call-template name="TableHeaders"/> <!--START LISTING OF CODE THAT HAS BEEN TRIED--> <!--This produced "Not a node item" error--> <xsl:for-each select="'/Row/Portal_Only[text()=$Yes]' and 'Root/Row/Role[text()=$Manager]'"> <xsl:apply-templates/> </xsl:for-each> <!--This produced "True" to be outputted instead of data --> <xsl:for-each select="'/Row/Portal_Only[text()=$Yes]' and 'Root/Row/Role[text()=$Manager]'"> <xsl:value-of select="."/> </xsl:for-each> <!--This produced all data for Role=Manager regardless whether Portal_Only=Yes--> <xsl:if test="'/Row/Portal_Only[text()=$Yes]' and 'Root/Row/Role[text()=$Manager]'"> <xsl:apply-templates select="key('Role', $Manager) | key ('PortalOnly', $Yes)"/> </xsl:if> <!--This produced all data for Role=Manager regardless whether Portal_Only=Yes--> <xsl:if test="'/Row/Portal_Only[text()=$Yes]' and 'Root/Row/Role[text()=$Manager]'"> <xsl:apply-templates/> </xsl:if> <!--END LISTING OF CODE THAT HAS BEEN TRIED--> </table> <xsl:call-template name="BackToTop"/> </xsl:template> Thanks for your help! _______________________________ Sharon Goldner Harris Knowledge Management Evangelist Ultimate Software Group 704-660-6482 Confidentiality Note: This e-mail message and any attachments to it are intended only for the named recipients and may contain legally privileged and/or confidential information. If you are not one of the intended recipients, do not duplicate or forward this e-mail message.
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Filter by multiple nodes , Emmanuel Begue | Thread | Re: Fwd: [xsl] Filter by multiple n, Sharon_Harris |
Re: [xsl] xsl transform for DOAJ?, Wendell Piez | Date | Re: [xsl] Definite list of XSLT 2.0, Justin Johansson |
Month |