xsl-list
[Top] [All Lists]

how to get node with maximum child nodes ??

2003-08-28 08:38:00
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



<Prev in Thread] Current Thread [Next in Thread>
  • how to get node with maximum child nodes ??, Dipesh Khakhkhar <=