Subject: [xsl] Wrapping a Condition around a literal result element From: "Kevin Bird" <kevin.bird@xxxxxxxxxxxxxxxxxxxxxxx> Date: Tue, 16 May 2006 10:55:26 +0100 |
Hi Given the following input, I need to remove name elements that exist in every section (but do not contain the string 'new entry') and create a new section containing the aforementioned. The stylesheet below gives me the desired result for this given input, but the <section name="allsections"> element is hard coded into the stylesheet. I will have instances where no name elements exist in every section and therefore I do not want to output a self closing section element. I am struggling to write a condition around <section name="allsections">. Any help would be appreciated. Kind regards. -- Kevin ---------------- Input: ---------------- <?xml version="1.0"?> <sections> <section name="North"> <name>Kevin</name> <name>Bill</name> <name>Fred</name> <name>Ollie</name> <name>Frank - new entry</name> <name>Bob - new entry</name> </section> <section name="South"> <name>Fred</name> <name>Kevin</name> <name>Bill</name> <name>Frank - new entry</name> <name>Bob - new entry</name> </section> <section name="West"> <name>Kevin</name> <name>Frank - new entry</name> <name>Bill</name> <name>Ollie</name> <name>Bob - new entry</name> <name>Fred</name> </section> <section name="East"> <name>Harry</name> <name>Bob - new entry</name> <name>Bill</name> <name>Frank - new entry</name> <name>Kevin</name> <name>Ollie</name> </section> </sections> ----------------- Required Output ----------------- <?xml version="1.0" encoding="UTF-8"?> <sections> <section name="North"> <name>Fred</name> <name>Ollie</name> <name>Frank - new entry</name> <name>Bob - new entry</name> </section> <section name="South"> <name>Fred</name> <name>Frank - new entry</name> <name>Bob - new entry</name> </section> <section name="West"> <name>Frank - new entry</name> <name>Ollie</name> <name>Bob - new entry</name> <name>Fred</name> </section> <section name="East"> <name>Harry</name> <name>Bob - new entry</name> <name>Frank - new entry</name> <name>Ollie</name> </section> <section name="allsections"> <name>Kevin</name> <name>Bill</name> </section> </sections> ------------------ XSL ------------------ <?xml version="1.0"?> <xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:output indent="yes" method="xml"/> <xsl:strip-space elements="*"/> <xsl:template match="sections"> <sections> <xsl:variable name="section-count" select="count(section)"/> <xsl:for-each select="section"> <section name="{@name}"> <xsl:variable name="other-sections" select="preceding-sibling::section|following-sibling::section"/> <xsl:for-each select="name"> <xsl:choose> <xsl:when test="contains(.,'new entry')"> <name> <xsl:value-of select="."/> </name> </xsl:when> <xsl:when test="count($other-sections/name[lower-case(.) = lower-case(current())]) = ($section-count -1)"/> <xsl:otherwise> <name> <xsl:value-of select="."/> </name> </xsl:otherwise> </xsl:choose> </xsl:for-each> </section> </xsl:for-each> <!-- This is hard coded, need to add a condition --> <section name="allsections"> <xsl:for-each select="section[1]/name"> <xsl:variable name="other-sections" select="../following-sibling::section"/> <xsl:choose> <xsl:when test="contains(.,'new entry')"/> <xsl:when test="count($other-sections/name[lower-case(.) = lower-case(current())]) = ($section-count -1)"> <xsl:copy-of select="."/> </xsl:when> <xsl:otherwise/> </xsl:choose> </xsl:for-each> </section> </sections> </xsl:template> </xsl:stylesheet>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] FO: Non-proportional outp, Christian Haase | Thread | RE: [xsl] Wrapping a Condition arou, Michael Kay |
Re: [xsl] Transforming Tables - rep, David Carlisle | Date | Re: [xsl] Transforming Tables - rep, Jeff Sese |
Month |