|
[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message] RE: Element selection based on different overlapping
Thank you Andrew, Michael and David Yes, I mean all descendants. This: <xsl:choose> <xsl:when test="every $d in .//* satisfies $d[self::ROW or self::CELL or self::A]"> <xsl:call-template name="Mtable" /> </xsl:when> <xsl:when test="every $d in .//* satisfies $d[self::X or self::Y or... ]"> <xsl:call-template name="Xtable" /> </xsl:when> ... </xsl:choose> is certainly a lot cleaner than what I was doing - but it still gets unwieldy when I put in all the possible element names that these tables really do cover. Is there a shortcut for the predicate of $d in the above so that I could e.g. have a series of sequence variables defined - something along these lines: <xsl:variable name="Mlist" select="'ROW', 'CELL', 'A',..." /> <xsl:variable name="Xlist" select="'X', 'Y', 'Z',..." /> <xsl:variable name="Zlist" select="'ROW', 'CELL', 'A', 'STUFF', 'POINT', 'LEX', 'HEX', 'REX',..." /> ... etc. and test for which (if any) of these sequences it is true that every descendant's name is in it, like so: <xsl:when test="every $d in .//* satisfies $d[self::name() is in $Mlist"> <xsl:call-template name="Mtable" /> </xsl:when> ... etc. That expression doesn't work, but is there something like it that does? Cheers Trevor ------------------------------ Date: Wed, 1 Feb 2006 12:10:53 -0000 To: <xsl-list@xxxxxxxxxxxxxxxxxxxxxx> From: "Michael Kay" <mike@xxxxxxxxxxxx> Subject: RE: Element selection based on different overlapping descendant subsets > > I can define a set M of element names and if > > every descendant > > of a particular <TABLE> is in this set then it is an > > M-TABLE, > Define each known table type as a key: > > <xsl:key name="m-table" match="table[.//ROW][.//CELL][.//A]" > use="generate-id()"/> > The approach using keys is a good idea, but I don't think Andrew's key definition actually captures the requirement as stated. In 2.0 it's: match="TABLE[every $d in .//* satisfies $d[self::ROW or self::CELL or self::A]]" which translates into the 1.0 match="TABLE[not(.//*[not(self::ROW or self::CELL or self::A)])] Michael Kay http://www.saxonica.com/ ------------------------------
|
PURCHASE STYLUS STUDIO ONLINE TODAY!Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced! Cast Your Vote
We need your help – Vote for DataDirect XML Products!
Winners and finalists announced at SOA World Conference in November. Download The World's Best XML IDE!Accelerate XML development with our award-winning XML IDE - Download a free trial today! Subscribe in XML format
|







