Search code examples
jqueryspry

Create a accordion in jquery, that picks up its content from a xml file


I want to create a jquery accordion dynamically by getting node names from the xml.

In the xml under product domainmetadata will be only once and there are only 2 services at the moment CMS and DIS so 2 service types are available.

under service type (domainmetadata_service) domainmetadata_service_optiongroup and domainmetadata_optiongroup can be many and only 1 domainmetadata_resourceinfo

So how can i have an accordion something like below structure

Health Check
Configuration
    -System
        -environment
    -PRODUCT
        -DOMAINMETADATA
            -domainmetadata_gateways
            -domainmetadata_gridinfo
            -domainmetadata_service
                -CMS
                    -domainmetadata_service_optiongroup
                    -domainmetadata_optiongroup
                    -domainmetadata_resourceinfo
                -DIS
                    -domainmetadata_service_optiongroup
                    -domainmetadata_optiongroup
                    -domainmetadata_resourceinfo

Right now I am using Spry framework, which is giving me lots of trouble making the accordion dynamic. Click here to view the demo

My XML Response

<?xml-stylesheet type="text/xsl" href="csmclientinfa9.xsl"?><csmclient product="lolv9" date="11/4/11 4:36 PM" version="1.0"><system>
<environment>
    <variable name='HOST' value='estilo' />
</environment>
</system>
<product>
  <domainmetadata>
    <domainmetadata_gateways nodename='N_1164898448' host='opera' httpport='18,448' port='18,449' />
    <domainmetadata_gridinfo>Present</domainmetadata_gridinfo>

    <domainmetadata_service type='ContentManagementService' name='CMS' version='' licenseName='license_all'>
      <domainmetadata_serviceprocess node_name='N_1164898448' pre_start_command='null' post_start_command='null' jvm_options='' />
      <domainmetadata_service_optiongroup name='AddressManagerOptions'>
        <domainmetadata_option type='com.abc.isp.metadata.common.OptionType' name='FullPreLoadCountries' value='' />
        <domainmetadata_option type='com.abc.isp.metadata.common.OptionType' name='PartialPreLoadCountries' value='' />
      </domainmetadata_service_optiongroup>
      <domainmetadata_optiongroup name='DataServiceOptions'>
        <domainmetadata_option type='com.abc.isp.metadata.common.OptionType' name='DataServiceName' value='DIS' />
      </domainmetadata_optiongroup>
      <domainmetadata_resourceinfo>
        <domainmetadata_resource type='Connection' name='Database:PWX DB2400' isAvailable='true' />
        <domainmetadata_resource type='Connection' name='Application:SAP_ALE_IDoc_Reader' isAvailable='true' />
      </domainmetadata_resourceinfo>
    </domainmetadata_service>

    <domainmetadata_service type='DataIntegrationService' name='DIS' version='' licenseName='license_all'>
      <domainmetadata_serviceprocess node_name='N_1164898448' pre_start_command='null' post_start_command='null' jvm_options='' />
      <domainmetadata_service_optiongroup name='SQLServiceOptions'>
        <domainmetadata_option type='com.abc.isp.metadata.common.OptionType' name='MaxConcurrentConnections' value='100' />
        <domainmetadata_option type='com.abc.isp.metadata.common.OptionType' name='MaxPlanCacheSize' value='100' />
      </domainmetadata_service_optiongroup>
      <domainmetadata_service_optiongroup name='CoreServiceOptions'>
        <domainmetadata_option type='com.abc.isp.metadata.common.OptionType' name='ServicePort' value='0' />
        <domainmetadata_option type='com.abc.isp.metadata.common.OptionType' name='JMXPort' value='0' />
      </domainmetadata_service_optiongroup>
      <domainmetadata_service_optiongroup name='LoggingOptions'>
        <domainmetadata_option type='com.abc.isp.metadata.common.OptionType' name='LogDirectory' value='./disLogs' />
      </domainmetadata_service_optiongroup>
      <domainmetadata_resourceinfo>
        <domainmetadata_resource type='Connection' name='Database:PWX DB2400' isAvailable='true' />
        <domainmetadata_resource type='Connection' name='Application:SAP_ALE_IDoc_Reader' isAvailable='true' />
      </domainmetadata_resourceinfo>
    </domainmetadata_service>
</domainmetadata>
</product>

Solution

  • This is what I came up with

    var infa9Spans='<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9PMServer">PowerCenter Server</a><br/></span>';
    $(xml).find("csmclient").each(function()
            {
                $(this).find('product').each(function(){ 
    
                      $(this).find('domainmetadata_service').each(function(){ 
                        var servicename=$(this).attr('name');
                        infa9Spans+='<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9Service">'+servicename+'</a><br/></span>';
                        //var servicediv="<div title="+servicename+" class='class'>";
                    });
                });
            });
    infa9Spans+='<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9PWXServer">PowerExchange Server</a><br/></span>'+
    '<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9Oracle">Oracle</a><br/></span>'+
    '<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9DB2">DB2</a><br/></span>'+
    '<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9Sybase">Sybase</a><br/></span>'+
    '<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9Informix">Informix</a><br/></span>'+
    '<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9ODBC">ODBC</a><br/></span>'+
    '<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9Java">Java Version</a><br/></span>'+
    '<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9TomcatEnvvars">Tomcat Envvars.txt</a><br/></span>'+
    '<span class="infa9span"><img src="/csm/view/include/images/foldericon.png"/><a id="infa9AD50">AD50.cfg</a><br/></span>';
    
    
    var productSpans=infa9Spans;
    
    $('#productAcc').append(productSpans);
    
    customizeProductAccordion("infa9");