Subject: Union and descendants: count(.//name1|name2) ? Doesn't perform Union? From: Joshua Gough <exv@xxxxxxxxxxx> Date: Mon, 12 Jul 1999 19:13:12 -0400 (EDT) |
Hi, I've run into a problem using LotusXSL 0.17.3 as well as the 7/08 release of XT with the use of .// or // in conjunction with the | operator. For example: count(.//entry|e) Returns only the number of "entry" elements without adding the number of e matches to the result. Similarly, count(.//e|entry) returns the number of e. However: count(./e|entry) Works fine, counting both, when in fact the context node contains those children. I figured that the former would work the same way with the | operator. I can achieve the desired result using this long-winded syntax: count(//*[qname() = 'entry' or qname() = 'e']) But, I still figure the | operator should work. Can someone explain why this is not so? Here is some quick copy and paste sample code to see the results: XML: <?xml version="1.0"?> <!DOCTYPE Section > <Section> <SubSection> <entry>Blah</entry> <e>Blah as well</e> <entry>BLar blah</entry> <entry>Blahsdfdsafs </entry> </SubSection> </Section> XSL: <?xml version="1.0"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/XSL/Transform/1.0" xmlns:lxslt="http://xsl.lotus.com/" xmlns="http://www.w3.org/TR/REC-html40" result-ns="" > <xsl:template match="/"> <h2>| operator and .// ?</h2> <p> The total number of e and entry (e|entry) in this document is: <xsl:value-of select="count(//e|entry)" /><br /> The total number of entry and e (entry|e) in this document is: <xsl:value-of select="count(//entry|e)" /><br /> Using //*[qname() = 'entry' or qname() = 'e'], the total is: <xsl:value-of select="count(//*[qname() = 'entry' or qname() = 'e'])" /><br /> <br /> <xsl:for-each select="//*[not (qname() = 'entry') and not (qname() = 'e') ]"> Name: <xsl:value-of select="qname(.)" /><br /> Descendants <b>count(.//e|entry)</b>: <xsl:value-of select="count(.//e|entry)" /><br /> Descendants <b style="background: beige">count(.//entry|e)</b>: <xsl:value-of select="count(.//entry|e)" /><br /> Children <xsl:value-of select="count(./e|entry)" /><br /> <br /> </xsl:for-each> </p> </xsl:template> </xsl:stylesheet> Text Output: | operator and .// ? The total number of e and entry (e|entry) in this document is: 1 The total number of entry and e (entry|e) in this document is: 3 Using //*[qname() = 'entry' or qname() = 'e'], the total is: 4 Name: Section Descendants count(.//e|entry): 1 Descendants count(.//entry|e): 3 Children 0 Name: SubSection Descendants count(.//e|entry): 4 Descendants count(.//entry|e): 4 Children 4 (I don't understand why the .// actually works once it got into SubSection either) Thanks, Josh Gough XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: is there a "template" template?, Wilson, James.W | Thread | Re: Union and descendants: count(./, G. Ken Holman |
Re: Embedded XML/XSL documents, Sara Mitchell | Date | Re: Improving XSLT code, G. Ken Holman |
Month |