Re: [xsl] Match the element that have children and the attribute this="true" or the parent of the element having the attribute this="true" that does not have children.

Subject: Re: [xsl] Match the element that have children and the attribute this="true" or the parent of the element having the attribute this="true" that does not have children.
From: Jacob Friis Saxberg <friis.saxberg@xxxxxxxxx>
Date: Thu, 1 Dec 2005 10:24:44 +0100
> > I'd like to match the (element that have (children and the (attribute
> > this="true"))) or the parent of the (element (having the attribute
> > this="true") (that does not have children)).
>
> Assuming I've parsed your English correctly,
>
> match="*[*][@this="true"] | *[*[not(*)][@this="true"]]"

Great, this is my working XSLT file. Can I improve it?


<?xml version="1.0" encoding="iso-8859-1"?>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform";>
<xsl:output method="xml" encoding="iso-8859-1"
omit-xml-declaration="yes" standalone="no" indent="no" />

<xsl:template match="/">
	<xsl:apply-templates select="opml/body/outline" />
</xsl:template>

<xsl:template match="*[*][@this='true'] | *[*[not(*)][@this='true']]">
	<ul>
		<xsl:for-each select="outline">
			<li>
				<xsl:if test="@this='true'">
					<xsl:attribute name="class">active</xsl:attribute>
				</xsl:if>
				<a>
					<xsl:attribute name="href">
						<xsl:value-of select="@url" />
					</xsl:attribute>
					<xsl:text>&#187; </xsl:text>
					<xsl:value-of select="@title" />
				</a>
			</li>
		</xsl:for-each>
	</ul>
</xsl:template>

</xsl:stylesheet>

Current Thread