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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
[xsl] Re: Re: What would be the bes, Dimitre Novatchev | Thread | [xsl] format-number abd numerical t, Nunnington, John |
Re: [xsl] xmllint -format, xsltproc, Taro Ikai | Date | [xsl] format-number abd numerical t, Nunnington, John |
Month |