RE: [xsl] Ways to simplify XSL, complex "select/filter criteria"

Subject: RE: [xsl] Ways to simplify XSL, complex "select/filter criteria"
From: "Michael Kay" <mike@xxxxxxxxxxxx>
Date: Thu, 7 Jan 2010 22:08:06 -0000
You'll have to give more context - I don't exactly remember this thread from
a previous decade ;-)

The apostrophe in the error message looks suspicious

invalid lexical value - '2005-09-19T00:00:00

Perhaps it's present in your data?

Regards,

Michael Kay
http://www.saxonica.com/
http://twitter.com/michaelhkay

> -----Original Message-----
> From: J L [mailto:jinlii@xxxxxxxxxxx]
> Sent: 07 January 2010 18:57
> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> Subject: RE: [xsl] Ways to simplify XSL, complex
> "select/filter criteria"
>
>
> I tried the transformation in Altova. It complains about
> Error in XPath 2.0 expression Cast failed, invalid lexical
> value - '2005-09-19T00:00:00
>                  ...
>
>              ...
> 2010-09-19T00:00:00email1@xxxxxxxxxxxxxxxxxxx:00:00email2@xxxxxx'
>
> If I change '2005-09-19T00:00:00' to 2005-09-19. The same
> error. Do you know why?
>
>
> ----------------------------------------
> > From: mike@xxxxxxxxxxxx
> > To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> > Date: Fri, 18 Dec 2009 10:23:36 +0000
> > Subject: RE: [xsl] Ways to simplify XSL, complex
> "select/filter criteria"
> >
> >
> > I don't think I fully understand the requirement, but it's
> certainly a
> > case where your code can be simplified by use of functions. For
> > example you can define this function
> >
> >
> >
> >
> > select="xs:dateTime($v/ns:startDateTime)"/>
> >
> > select="xs:dateTime($v/ns:endDateTime)"/>
> >
> >
> >
> > and this one
> >
> >
> >
> >
> >
> >
> > and then you can do things like
> >
> >
> > [exists(ns:validFor[f:applies-now(.)])]"/>
> >
> > Regards,
> >
> > Michael Kay
> > http://www.saxonica.com/
> > http://twitter.com/michaelhkay
> >
> >> -----Original Message-----
> >> From: Stefan Fritz [mailto:sfritz.nospam@xxxxxx]
> >> Sent: 18 December 2009 10:07
> >> To: xsl-list@xxxxxxxxxxxxxxxxxxxxxx
> >> Subject: [xsl] Ways to simplify XSL, complex
> "select/filter criteria"
> >>
> >> Hi all,
> >>
> >> first my environment: Saxon 8.9, XSL and Xpath 2.0, Java
> >>
> >> I have to transform a XML document which contains elements
> with the
> >> same name but different xs:type.
> >> In addition the elements contain an optional validFor
> element which
> >> defines a time period for the validity of the data.
> >>
> >> The rules to implement is:
> >> - select element by xsi type
> >> - select the valid (in time period) element
> >> - if no time period specified and multiple elements of the
> same type
> >> exist, take the first one
> >>
> >> I have to apply these rules in almost every value-of
> selection in my
> >> XSLT and therefore the XSLT became really a nightmare.
> >> I hope there is a solution to simplify this. I though about
> >> xsl:function, dynamic Xpath (saxon:evaluate,..) but
> couldn't get it
> >> to work.
> >> Any help more than appreciated!
> >>
> >> Thanks
> >> Stefan
> >>
> >> simplified XML and XSL:
> >>
> >>
> >> xsi:type="ns:Individual"
> >> xmlns:ns="http://myns";
> >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> >>
> >>
> >> 1800-01-01T00:00:00
> >>
> >>
> >>
> >>
> >>
> >> 2005-09-19T00:00:00
> >>
> >>
> >>
> >> ...
> >>
> >>
> >> ...
> >>
> >>
> >>
> >> 2010-09-19T00:00:00
> >>
> >> email1@xxxxxx
> >>
> >>
> >>
> >> 2010-09-19T00:00:00
> >>
> >> email2@xxxxxx
> >>
> >>
> >>
> >>
> >>
> >>
> >>
> >> xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
> >> xmlns:cdm="http://myns";
> >> xmlns:xs="http://www.w3.org/2001/XMLSchema";
> >> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";>
> >>
> >>
> >>
> >>
> >> select="/cdm:Individual/cdm:PartyPlays[contains(@xsi:type,'Emp
> >> loyee')][
> >> if(string-length(cdm:validFor/cdm:startDateTime) gt 0 and
> >> string-length(cdm:validFor/cdm:endDateTime) gt 0) then
> >> (xs:dateTime(cdm:validFor/cdm:startDateTime) lt
> >> current-dateTime() and
> >> xs:dateTime(cdm:validFor/cdm:endDateTime)gt
> >> current-dateTime()) else
> >> if(string-length(cdm:validFor/cdm:startDateTime) gt 0) then
> >> (xs:dateTime(cdm:validFor/cdm:startDateTime) lt
> >> current-dateTime()) else
> >> if(string-length(cdm:validFor/cdm:endDateTime) gt 0) then (
> >> xs:dateTime(cdm:validFor/cdm:endDateTime)gt
> current-dateTime()) else
> >> 1
> >> ]/cdm:PartyRoleContactableVia[contains(@xsi:type,'EMailContact')][
> >> if(string-length(cdm:validFor/cdm:startDateTime) gt 0 and
> >> string-length(cdm:validFor/cdm:endDateTime) gt 0) then
> >> (xs:dateTime(cdm:validFor/cdm:startDateTime) lt
> >> current-dateTime() and
> >> xs:dateTime(cdm:validFor/cdm:endDateTime)gt
> >> current-dateTime()) else
> >> if(string-length(cdm:validFor/cdm:startDateTime) gt 0) then
> >> (xs:dateTime(cdm:validFor/cdm:startDateTime) lt
> >> current-dateTime()) else
> >> if(string-length(cdm:validFor/cdm:endDateTime) gt 0) then (
> >> xs:dateTime(cdm:validFor/cdm:endDateTime)gt
> current-dateTime()) else
> >> 1
> >> ][1]/cdm:eMailAddress[1]"/>
> >
>
> _________________________________________________________________
> Hotmail: Trusted email with powerful SPAM protection.
> http://clk.atdmt.com/GBL/go/196390707/direct/01/

Current Thread