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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] Ways to simplify XSL, com, J L | Thread | Re: [xsl] Ways to simplify XSL, com, Imsieke, Gerrit, le- |
Re: [xsl] Incrementing a page numbe, G. Ken Holman | Date | Re: [xsl] Ways to simplify XSL, com, Imsieke, Gerrit, le- |
Month |