[XSL-LIST Mailing List Archive Home] [By Thread] [By Date]

[xsl] how to get node with maximum child nodes ??


Subject: [xsl] how to get node with maximum child nodes ??
From: Dipesh Khakhkhar <dkhakhkh@xxxxxxxxxxxxxxx>
Date: Thu, 28 Aug 2003 11:38:00 -0400

Hi,

I am trying to find a node with maximum child node. Here is my xml.

XML
=====

<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSPY v5 rel. 4 U (http://www.xmlspy.com) by Dipesh 
Khakhkhar (Fidelity Investments) -->
<AEXDATAEXTRACT DTD_VERSION="2.2" EXTRACT_START_DATETIME="1/9/2003 4:49:39 PM" 
EXTRACT_TYPE="FULL" EXTRACT_COLLECTION="">
	<RESOURCE_TYPE GUID="{493435f7-3b17-4c4c-b07f-c23e7ab7781f}" NAME="Computer" 
DESCRIPTION="Asset Type definition for Computer" SOURCE="Asset" 
CREATED_DATE="7/16/2002 5:22:23 PM" MODIFIED_DATE="9/23/2002 2:17:48 PM" 
DELETED="0">
		<RESOURCE GUID="{C116FCBF-5B94-4F15-BF95-5795DBD384CD}" 
NAME="ALTIRISTEST_CPQ" SOURCE="" SITE_CODE="756win" DOMAIN="FIDD" 
SYSTEM_TYPE="Win32" OS_NAME="Microsoft Windows XP" OS_TYPE="Professional" 
OS_VERSION="5.1" OS_REVISION="Service Pack 1" LAST_LOGON_USER="" 
LAST_LOGON_DOMAIN="">
			<INVENTORY>
				<ASSET>
					<IDENTIFICATION>
						<ATTRIBUTE NAME="Name">ALTIRISTEST_CPQ</ATTRIBUTE>
						<ATTRIBUTE NAME="Domain">FIDDOMRTLSLC</ATTRIBUTE>
						<ATTRIBUTE NAME="Altkey1" NULL="FALSE"/>
						<ATTRIBUTE NAME="Altkey2">00-02-A5-1A-67-A6</ATTRIBUTE>
					</IDENTIFICATION>
					<CLASS NAME="Client_Agent">
						<OBJECT>
							<ATTRIBUTE NAME="Agent Name">Altiris eXpress NS Client</ATTRIBUTE>
							<ATTRIBUTE NAME="Product Version">5.5.0.517</ATTRIBUTE>
							<ATTRIBUTE NAME="Build Number">517</ATTRIBUTE>
							<ATTRIBUTE NAME="Install Path">C:\Program Files\Altiris\eXpress\NS 
Client</ATTRIBUTE>
						</OBJECT>

					</CLASS>
					<CLASS NAME="Inventory_Results">
						<OBJECT>
							<ATTRIBUTE NAME="Collection Time">1/9/2003 3:06:56 AM</ATTRIBUTE>
							<ATTRIBUTE NAME="File Count">3</ATTRIBUTE>
							<ATTRIBUTE NAME="Total Size">139271</ATTRIBUTE>
							<ATTRIBUTE NAME="Version">5: 5: 0: 423</ATTRIBUTE>
						</OBJECT>
					</CLASS>
				</ASSET>
			</INVENTORY>
		</RESOURCE>
		<RESOURCE GUID="{C116FCBF-5B94-4F15-BF95-5795DBD384CD}" 
NAME="ALTIRISTEST_CPQ" SOURCE="" SITE_CODE="756win" DOMAIN="FIDD" 
SYSTEM_TYPE="Win32" OS_NAME="Microsoft Windows XP" OS_TYPE="Professional" 
OS_VERSION="5.1" AdditionalCol="Working Additional Col Value" 
OS_REVISION="Service Pack 1" LAST_LOGON_USER="" LAST_LOGON_DOMAIN="">
			<INVENTORY>
				<ASSET>
					<IDENTIFICATION>
						<ATTRIBUTE NAME="Name">ALTIRISTEST_CPQ</ATTRIBUTE>
						<ATTRIBUTE NAME="Additional Column">additional column value</ATTRIBUTE>
						<ATTRIBUTE NAME="Domain">FIDDOMRTLSLC</ATTRIBUTE>
						<ATTRIBUTE NAME="Altkey1" NULL="FALSE"/>
						<ATTRIBUTE NAME="Altkey2">00-02-A5-1A-67-A6</ATTRIBUTE>
					</IDENTIFICATION>
					<CLASS NAME="Client_Agent">
						<OBJECT>
							<ATTRIBUTE NAME="Agent Name">Altiris eXpress NS Client</ATTRIBUTE>
							<ATTRIBUTE NAME="Product Version">5.5.0.517</ATTRIBUTE>
							<ATTRIBUTE NAME="Extra Column">Extra COlumn Value1</ATTRIBUTE>
							<ATTRIBUTE NAME="Build Number">517</ATTRIBUTE>
							<ATTRIBUTE NAME="Install Path">C:\Program Files\Altiris\eXpress\NS 
Client</ATTRIBUTE>
						</OBJECT>
					</CLASS>
				</ASSET>
			</INVENTORY>
		</RESOURCE>
	</RESOURCE_TYPE>
</AEXDATAEXTRACT>


----------------------------------------------------------------------

In the above xml I am trying to find a node (i.e CLASS having attribute 
Client_Agent)having an OBJECT node which has maximum child nodes i.e 
(ATTRIBUTES). I am sorting the OBJECT node by counting their child nodes i.e. 
"ATTRIBUTES". But i am getting two generate ids for such a OBJECT node whereas 
i should get only one. (I am using XML SPY as a debugger). Then I am tyring to 
get the node corresponding to such generate id but not getting anything from 
it.

Here is my xsl which is doing the above mentioned thing.

XSL
====

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
version="1.0">
<xsl:output method="text"/>

<!-- Getting Client_Agent node with maximum childnodes i.e. having maximum 
columns-->
<xsl:variable name="mostattClientAgentTable">
<xsl:for-each select="//CLASS">
	<xsl:choose>
		<xsl:when test="normalize-space(@NAME)='Client_Agent'">
			<xsl:for-each select="OBJECT">
				<xsl:sort select="count(ATTRIBUTE)" order="descending"/>
					<xsl:if test="position()=1">
						<xsl:value-of select="generate-id(.)"/>
					</xsl:if>
			</xsl:for-each>
		</xsl:when>
	</xsl:choose>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="maxattClntAgt-node" select="//node()[generate-id() = 
$mostattClientAgentTable]"/>
</xsl:stylesheet>

----------------------------------------------------------------------

I am getting two generate ids in the variable mostattClientAgentTable. I guess 
i should get only one. Or am i doing something wrong.

Then i am trying to get the node corresponding to such generate id and here I 
am not getting anything.

Any help to sort out this problem will be greatly appreciated.

Eagerly waiting for reply.

Regards,
Dipesh


 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



Current Thread
Keywords