Subject: Selecting (and excluding) nodes From: Marcus Andersson <marcus@xxxxxxxxxx> Date: Tue, 22 Jun 2004 16:55:58 +0200 |
<docroot> <services> <service id="842" name="service1"/> <service id="843" name="service2"/> <service id="844" name="service3"/> <service id="845" name="service4"/> </services>
<categories> <section> <category name="cat1"> <service ref="842"/> <service ref="844"/> </category> <category name="cat2"> <service ref="842"/> <service ref="843"/> <service ref="845"/> </category> <category name="cat3"> <service ref="843"/> </category> </section> </categories>
<node> <node> <services> <service ref="842"/> <service ref="844"/> <service ref="845"/> </services> <node> <ipranges> <range from="111111111111" to="222222222222"/> <range from="333333333333" to="444444444444"/> </ipranges> <services> <service ref="843"/> </service> </node> </node> </nodes> </docroot>
<result> <items> <item id="842" name="service1"/> <item id="843" name="service2"/> <item id="844" name="service3"/> <item id="845" name="service4"/> </items>
<categories> <category name="cat1"> <item ref="842"/> <item ref="844"/> </category> <category name="cat2"> <item ref="842"/> <item ref="845"/> </category> </categories> </result>
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">
<!-- The following three variables might replacable by just one. I haven't figured out how though. It's only $selectedNode that is interesting -->
<xsl:variable name="selectedNodeByIp" select="/docroot/nodes//node[ipranges/range[number(@from) <= $ip and $ip <= number(@to)]][1]"/>
<xsl:variable name="selectedNodeId"> <xsl:choose> <xsl:when test="$selectedNodeByIp"><xsl:value-of select="$selectedNodeByIp/@id"/></xsl:when> <xsl:otherwise><xsl:value-of select="/docroot/nodes/node[1]/@id"/></xsl:otherwise> </xsl:choose> </xsl:variable>
<xsl:template match="/docroot"> <docroot> <items> <xsl:for-each select="$selectedServices"> <item> <xsl:copy-of select="@*"/> </item> </xsl:for-each> </items> <categories> <xsl:apply-templates select="categories/section/category"/> </categories> </docroot> </xsl:template>
<xsl:template match="category"> <xsl:variable name="acat"> <category> <xsl:copy-of select="@*"/> <xsl:for-each select="service"> <xsl:if test="$selectedServices[@ref=current()/@ref]"> <item ref="{@ref}"/> </xsl:if> </xsl:for-each> </category> </xsl:variable> <xsl:variable name="cat" select="msxsl:node-set($acat)/category"/> <xsl:if test="count($cat/*) > 0"> <xsl:copy-of select="$cat"/> </xsl:if> </xsl:template>
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
RE: [xsl] List of Unique Items with, Michael Kay | Thread | [xsl] conversion from xslt2.0 to xs, TDarksword |
List of Unique Items within an XML , Ben Gazzard | Date | RE: [xsl] List of Unique Items with, Kenny Akridge |
Month |