[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
RE: [xsl]
RE: [xsl] XSLT 2.0
Subject: RE: [xsl] <xsl:call-template> XSLT 2.0 From: "Michael Kay" <mike@xxxxxxxxxxxx> Date: Thu, 20 Nov 2008 08:58:16 -0000 |
In xsl:choose, the branches are mutially exclusive - only one will be executed. I think you need to replace <xsl:choose> <xsl:when test="A">X</xsl:when> <xsl:when test="B">Y</xsl:when> <xsl:when test="C">Z</xsl:when> </xsl:choose> by <xsl:if test="A">X</xsl:when> <xsl:if test="B">Y</xsl:when> <xsl:if test="C">Z</xsl:when> Michael Kay http://www.saxonica.com/ > -----Original Message----- > From: Pankaj Chaturvedi [mailto:pankaj.chaturvedi@xxxxxxxxx] > Sent: 20 November 2008 08:36 > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx > Subject: [xsl] <xsl:call-template> XSLT 2.0 > > > Hi all, > > I have an xml structure looks like below: > > XML Snippet > ============ > > <?xml version="1.0" encoding="UTF-8"?> > <article> > <meta> > <production-dates printpubdate="2009" receiveddate="30Sep2008" > reviseddate="30Sep2008" acceptdate="30Oct2008"/> </meta> > <abstract>This is an abstract</abstract> </article> > > > I've defined a template for <production-dates> attributes, > which is like > this: > > > Stylesheet Snippet > =================== > > > <?xml version="1.0" encoding="UTF-8"?> > <xsl:stylesheet version="2.0" > xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> > > <!-- For Production-Dates --> > <xsl:variable name="months" as="element()+"> > <month name="Jan" num="January"/> > <month name="Feb" num="Febuary"/> > <month name="Mar" num="March"/> > <month name="Apr" num="April"/> > <month name="May" num="May"/> > <month name="Jun" num="June"/> > <month name="Jul" num="July"/> > <month name="Aug" num="August"/> > <month name="Sep" num="September"/> > <month name="Oct" num="October"/> > <month name="Nov" num="November"/> > <month name="Dec" num="December"/> > <month name="xxx" num="Xxx"/> > <month name="Xxx" num="Xxx"/> > </xsl:variable> > > > <xsl:template name="production_dates"> > <xsl:text>(</xsl:text> > <xsl:choose> > > <!-- Received date --> > > <xsl:when test="//production-dates/@receiveddate"> > <xsl:text>Received </xsl:text> > <xsl:for-each > select="//production-dates/@receiveddate"> > <xsl:variable name="re" select=" > '^([0-9a-z]{2})?([A-Za-z][a-z][a-z])([0-9]{4})$'"/> > <xsl:analyze-string select="." > regex="{ $re }"> > <xsl:matching-substring> > <xsl:variable name="day" > select="regex-group(1)"/> > <xsl:sequence select=" > concat(regex-group(1), ' ', > $months[@name eq > regex-group(2)]/@num, ' ', regex-group(3))"/> > </xsl:matching-substring> > </xsl:analyze-string> > </xsl:for-each> > </xsl:when> > > > <!-- Revised date --> > <xsl:when test="//production-dates/@reviseddate"> > <xsl:text>; final version received </xsl:text> > <xsl:for-each > select="//production-dates/@reviseddate"> > <xsl:variable name="re" select=" > '^([0-9a-z]{2})?([A-Za-z][a-z][a-z])([0-9]{4})$'"/> > <xsl:analyze-string select="." > regex="{ $re }"> > <xsl:matching-substring> > <xsl:variable name="day" > select="regex-group(1)"/> > <xsl:sequence select=" > concat(regex-group(1), ' ', > $months[@name eq > regex-group(2)]/@num, ' ', regex-group(3))"/> > </xsl:matching-substring> > </xsl:analyze-string> > </xsl:for-each> > </xsl:when> > > <!-- Accepted date --> > > <xsl:when test="//production-dates/@acceptdate"> > <xsl:text>; final version accepted </xsl:text> > <xsl:for-each > select="//production-dates/@acceptdate"> > <xsl:variable name="re" select=" > '^([0-9a-z]{2})?([A-Za-z][a-z][a-z])([0-9]{4})$'"/> > <xsl:analyze-string select="." > regex="{ $re }"> > <xsl:matching-substring> > <xsl:variable name="day" > select="regex-group(1)"/> > <xsl:sequence select=" > concat(regex-group(1), ' ', > $months[@name eq > regex-group(2)]/@num, ' ', regex-group(3))"/> > </xsl:matching-substring> > </xsl:analyze-string> > </xsl:for-each> > </xsl:when> > </xsl:choose> > > <xsl:text>)</xsl:text> > </xsl:template> > > <xsl:template match="article/abstract"> > <output> > <xsl:call-template name="production_dates"/> </output> > </xsl:template> </xsl:stylesheet> > > > Output > ======= > <output>(Received 30 September 2008)</output> > > > But the desired output is: > > (Received 30 September 2008; final version received 30 > September 2008; final version accepted 30 October 2008) > > I've noticed that problem with my <xsl:choose><xsl:when> > conditions in which it does not reach to the next <xsl:when> > conditions. And which are true in this case. (If I remove > <xsl:choose> all seems to work well). > > Is there any problem in my defining <xsl:for-each > select="//production-dates/@receiveddate"> "select" attribute > or there anything else I am missing. I am using Altova XMLSpy > XSLT 2.0. > > Any suggestions in this regard will be highly appreciated. > > > Best, > > Pankaj Chaturvedi > > ============================================================== > ============== > ================
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] <xsl:call-template> XSLT 2.0, Pankaj Chaturvedi | Thread | RE: [xsl] <xsl:call-template> XSLT , Pankaj Chaturvedi |
[xsl] <xsl:call-template> XSLT 2.0, Pankaj Chaturvedi | Date | RE: [xsl] <xsl:call-template> XSLT , Pankaj Chaturvedi |
Month |