Nic Miloslav Example 78 | KEYWORDS EXAMPLES AUTHORS |
---|
Stylesheet 1 and Stylesheet 2 count elements which occured in XML source. Stylesheet 3 lists all children of each element in the source.
XML | HOME XSL 1 XSL 2 XSL 3 XSL 4 |
---|
<xslTutorial > |
<AAA> |
<BBB id="b1"> |
<CCC name="q" size="12"/> |
<EEE id="e1"> |
<SSS/> |
</EEE> |
<CCC weight="45"/> |
<CCC/> |
</BBB> |
</AAA> |
<AAA> |
<EEE id="e2"/> |
<CCC> |
<DDD/> |
<DDD/> |
</CCC> |
</AAA> |
</xslTutorial> |
XSL 1 | HOME XML HTML 1 OUTPUT 1 |
---|
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> |
<xsl:template match="/"> |
<TABLE border='1' width="90%"> |
<TR><TH>Element</TH><TH>Occurs</TH></TR> |
<xsl:for-each select="/descendant::*"> |
<xsl:variable name="pos" select="position()"/> |
<xsl:if test="not(/descendant::*[position() < $pos and name()=name(current())])"> |
<TR><TD><xsl:value-of select="name()"/></TD><TD> |
<xsl:value-of select="count(/descendant::*[name()=name(current())])"/> |
</TD></TR> |
</xsl:if> |
</xsl:for-each> |
<TR><TH>Total count</TH><TH><xsl:value-of select="count(//*)"/></TH></TR> |
</TABLE> |
</xsl:template> |
</xsl:stylesheet> |
HTML 1 | HOME XML XSL 1 OUTPUT 1 |
---|
<TABLE border="1" width="90%"> |
<TR> |
<TH>Element</TH> |
<TH>Occurs</TH></TR> |
<TR> |
<TD>xslTutorial</TD> |
<TD>1</TD></TR> |
<TR> |
<TD>AAA</TD> |
<TD>2</TD></TR> |
<TR> |
<TD>BBB</TD> |
<TD>1</TD></TR> |
<TR> |
<TD>CCC</TD> |
<TD>4</TD></TR> |
<TR> |
<TD>EEE</TD> |
<TD>2</TD></TR> |
<TR> |
<TD>SSS</TD> |
<TD>1</TD></TR> |
<TR> |
<TD>DDD</TD> |
<TD>2</TD></TR> |
<TR> |
<TH>Total count</TH> |
<TH>13</TH></TR></TABLE> |
OUTPUT 1 | HOME XML XSL 1 HTML 1 |
---|
Element | Occurs |
---|---|
xslTutorial | 1 |
AAA | 2 |
BBB | 1 |
CCC | 4 |
EEE | 2 |
SSS | 1 |
DDD | 2 |
Total count | 13 |
XSL 2 | HOME XML HTML 2 OUTPUT 2 |
---|
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> |
<xsl:template match="/"> |
<TABLE border='1' width="90%"> |
<xsl:apply-templates select="//*"/> |
<TR><TH>Total count</TH><TH><xsl:value-of select="count(//*)"/></TH></TR> |
</TABLE> |
</xsl:template> |
<xsl:template match="*"> |
<xsl:if test="not(descendant::*[name()=name(current())] | following::*[name()=name(current())])"> |
<TR><TD><xsl:value-of select="name()"/></TD> |
<TD><xsl:value-of select="count(/descendant::*[name()=name(current())])"/></TD> |
</TR> |
</xsl:if> |
</xsl:template> |
</xsl:stylesheet> |
HTML 2 | HOME XML XSL 2 OUTPUT 2 |
---|
<TABLE border="1" width="90%"> |
<TR> |
<TD>xslTutorial</TD> |
<TD>1</TD></TR> |
<TR> |
<TD>BBB</TD> |
<TD>1</TD></TR> |
<TR> |
<TD>SSS</TD> |
<TD>1</TD></TR> |
<TR> |
<TD>AAA</TD> |
<TD>2</TD></TR> |
<TR> |
<TD>EEE</TD> |
<TD>2</TD></TR> |
<TR> |
<TD>CCC</TD> |
<TD>4</TD></TR> |
<TR> |
<TD>DDD</TD> |
<TD>2</TD></TR> |
<TR> |
<TH>Total count</TH> |
<TH>13</TH></TR></TABLE> |
OUTPUT 2 | HOME XML XSL 2 HTML 2 |
---|
xslTutorial | 1 |
BBB | 1 |
SSS | 1 |
AAA | 2 |
EEE | 2 |
CCC | 4 |
DDD | 2 |
Total count | 13 |
---|
XSL 3 | HOME XML HTML 3 OUTPUT 3 |
---|
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> |
<xsl:template match="/"> |
<xsl:for-each select="/descendant::*"> |
<xsl:variable name="pos" select="position()"/> |
<xsl:variable name="name" select="name()"/> |
<xsl:if test="not(/descendant::*[position() < $pos and name()= $name])"> |
<P><xsl:value-of select="$name"/> |
<xsl:text> [</xsl:text> |
<xsl:for-each select="//*[name()=$name]/*"> |
<xsl:variable name="p" select="position()"/> |
<xsl:if test="not(//*[name()=$name]/*[position()< $p and name()=name(current())])"> |
<xsl:value-of select="name()"/><xsl:text> , </xsl:text> |
</xsl:if> |
</xsl:for-each> |
<xsl:text> ]</xsl:text> |
</P> |
</xsl:if> |
</xsl:for-each> |
</xsl:template> |
</xsl:stylesheet> |
HTML 3 | HOME XML XSL 3 OUTPUT 3 |
---|
<P>xslTutorial [AAA, ]</P> |
<P>AAA [BBB, ]</P> |
<P>BBB [CCC, EEE, ]</P> |
<P>CCC [DDD, ]</P> |
<P>EEE [SSS, ]</P> |
<P>SSS []</P> |
<P>DDD []</P> |
OUTPUT 3 | HOME XML XSL 3 HTML 3 |
---|
xslTutorial [AAA, ]
AAA [BBB, ]
BBB [CCC, EEE, ]
CCC [DDD, ]
EEE [SSS, ]
SSS []
DDD []
XSL 4 | HOME XML HTML 4 OUTPUT 4 |
---|
<xsl:stylesheet version='1.0' xmlns:xsl='http://www.w3.org/1999/XSL/Transform'> |
<xsl:template match="/"> |
<TABLE border='1' width="90%"> |
<xsl:apply-templates select="//*"/> |
</TABLE> |
</xsl:template> |
<xsl:template match="*"> |
<xsl:if test="not(descendant::*[name()=name(current())] | following::*[name()=name(current())])"> |
<TR><TD><xsl:value-of select="name()"/></TD> |
<TD><xsl:apply-templates select="." mode='list'/></TD> |
</TR> |
</xsl:if> |
</xsl:template> |
<xsl:template match="*" mode='list'> |
<xsl:for-each select="//*[name()=name(current())]/*"> |
<xsl:value-of select="name()"/> |
</xsl:for-each> |
</xsl:template> |
</xsl:stylesheet> |
HTML 4 | HOME XML XSL 4 OUTPUT 4 |
---|
<TABLE border="1" width="90%"> |
<TR> |
<TD>xslTutorial</TD> |
<TD>AAAAAA</TD></TR> |
<TR> |
<TD>BBB</TD> |
<TD>CCCEEECCCCCC</TD></TR> |
<TR> |
<TD>SSS</TD> |
<TD/></TR> |
<TR> |
<TD>AAA</TD> |
<TD>BBBEEECCC</TD></TR> |
<TR> |
<TD>EEE</TD> |
<TD>SSS</TD></TR> |
<TR> |
<TD>CCC</TD> |
<TD>DDDDDD</TD></TR> |
<TR> |
<TD>DDD</TD> |
<TD/></TR></TABLE> |
OUTPUT 4 | HOME XML XSL 4 HTML 4 |
---|
xslTutorial | AAAAAA |
BBB | CCCEEECCCCCC |
SSS | |
AAA | BBBEEECCC |
EEE | SSS |
CCC | DDDDDD |
DDD |