xsl-list
[Top] [All Lists]

Re: Re: [xsl] Complex expression

2006-03-16 19:20:48
So I am trying to do an enhancement to Cocoon 2.0/XSLT1.0 application:
add a date validation of Excel cells (named Start_Date) in SQLTransformer,
so if a Type of that cell is not a DATE, insert that row into Error table
(otherwise to the Main table).


I tried:
<xsl:when test='not(sht:Cell[sht:Name="Start_Date"]/@ValueType = "DATE")' >
and:
<xsl:when test='not(sht:Cell/sht:Name[.="Start_Date"]/@ValueType = "DATE")'>
but neither worked (seem to stop - no exceptions, nothing inserted in DB).

Unfortunately I can not get an input XML [Cocoon pipelines sometimes are
very difficult to debug,
inserting serializer doesn't produce anything]

Here is a code snippet. It uploads Excel file, converts it to XML and
processes it.
<xsl:template match="/">

...<xsl:apply-templates/>

</xsl:template>


<xsl:template match='sht:Row'>

<!-- do some integrity checks. If they fail, put them into the
load_member_reject table -->

<xsl:choose>

  <xsl:when
test='not(sht:Cell[sht:Name="Start_Date"]/@ValueType="DATE")'>

    <xsl:call-template name='buildStatement'>

      <xsl:with-param name='row' select='.'/>

      <xsl:with-param
name='table'><xsl:text>error_table</xsl:text></xsl:with-param>

      <xsl:with-param name='notes'>

         <xsl:text>Start_ Date has a wrong type or date is not
formatted properly (record ignored)</xsl:text>

      </xsl:with-param>

    </xsl:call-template>

  </xsl:when>

... other validations

otherwise - insert in main_table

</xsl:choose>

</xsl:template>


Any help is very appreciated.

Thank you in advance,
Oleg.



On 3/16/06, Oleg Konovalov <olegkon(_at_)gmail(_dot_)com> wrote:
Slight Correction:

So should I use
<xsl:when test='not(sht:Cell[sht:Name="Start_Date"]/@ValueType = "DATE")' >
as opposed to:
<xsl:when test='not(sht:Cell/sht:Name[.="Start_Date"]/@ValueType = "DATE")'>

Is that correct ?


On 3/16/06, Oleg Konovalov <olegkon(_at_)gmail(_dot_)com> wrote:
Andrew,

So you are saying that to determine the Type of the Cell [named 
"Start_Date"],
I need to use:  sht:Cell[sht:Name="Start_Date"]/@ValueType.

I also looked at not() vs. != in "Beginning XSLT" book and
if I understand correctly, it is better to use not() in my case (for
comparison true for any node), so it boils down to using:
<xsl:when test='not(sht:Cell[sht:Name="Start_Date"]/@ValueType = 'DATE')' 
...

Do you agree ?

Thank you,
Oleg.

On 3/16/06, andrew welch <andrew(_dot_)j(_dot_)welch(_at_)gmail(_dot_)com> 
wrote:
On 3/16/06, Oleg Konovalov <olegkon(_at_)gmail(_dot_)com> wrote:
Are these 2 expressions equal (if not, please explain):
sht:Cell[sht:Name="Start_Date"]/@ValueType    and
sht:Cell/sht:Name[.="Start_Date"]/@ValueType

no, the former looks for @ValueType on sht:Cell and the latter on 
sht:Name...

Sorry I hit "reply" instead of "reply to all" on the last mail, we
really should keep this on list




--~------------------------------------------------------------------
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>
--~--

<Prev in Thread] Current Thread [Next in Thread>