xsl-list
[Top] [All Lists]

RE: [xsl] <xsl:call-template> XSLT 2.0

2008-11-20 05:25:44
 
Thanks Michael this does the trick. Why this does not came to my mind. Will
be careful in future.


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(_dot_)chaturvedi(_at_)idsil(_dot_)com]
Sent: 20 November 2008 08:36
To: xsl-list(_at_)lists(_dot_)mulberrytech(_dot_)com
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[(_at_)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[(_at_)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[(_at_)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

==============================================================
==============
================



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: 
<mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--


Confidentiality Notice:" This message and any attachment(s)
contained here are information that is confidential, proprietary to
IDS Infotech Ltd. and its customers.
Contents may be privileged or otherwise protected by law. The
information is solely intended for the individual or the entity it
is addressed to. If you are not the intended recipient of this
message, you are not authorized to read, forward, print, retain,
copy or disseminate this message or any part of it. If you have
received this e-mail in error, please notify the sender immediately
by return e-mail and delete it from your computer."

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--