Hai
 I have a new challenge based on the XML. I have tried with various
combination s but could not able to resolve it. So i request you guys to
help me out on this.

*******************************INPUT XML**********************************
<articleorder>
<group>
    <article-ref rid="001-1"/>
</group>
<group>
    <article-ref rid="001-2"/>
</group>
<group>
    <article-ref rid="001-3"/>
</group>
<group>
    <article-ref rid="001-4"/>
</group>
<group>
    <group>
        <title><![CDATA[News of the Week]]></title>
        <article-ref rid="001-5"/>
        <article-ref rid="001-6"/>
        <article-ref rid="001-7"/>
        <article-ref rid="001-8"/>
        <article-ref rid="001-9"/>
        <article-ref rid="001-10"/>
        <article-ref rid="001-11"/>
        <article-ref rid="001-12"/>
        <article-ref rid="001-13"/>
    </group>
</group>
<group>
    <group>
        <title><![CDATA[News Focus]]></title>
        <article-ref rid="001-14"/>
        <article-ref rid="001-15"/>
        <article-ref rid="001-16"/>
        <article-ref rid="001-17"/>
    </group>
</group>
<group>
    <article-ref rid="001-18"/>
</group>
<group>
    <group>
        <title><![CDATA[Commentary]]></title>
            <title><![CDATA[Letters]]></title>
            <article-ref rid="001-19"/>
            <article-ref rid="001-20"/>
            <article-ref rid="001-21"/>
            <article-ref rid="001-22"/>
            <article-ref rid="001-23"/>
            <article-ref rid="001-24"/>
            <article-ref rid="001-25"/>
            <article-ref rid="001-26"/>

    </group>
</group>
<group>
    <group>
        <title><![CDATA[Commentary]]></title>
            <title><![CDATA[Books et al.]]></title>
            <article-ref rid="001-27"/>
            <article-ref rid="001-28"/>
        </group>

</group>
<group>
    <group>
        <title><![CDATA[Commentary]]></title>
            <title><![CDATA[Policy Forum]]></title>
            <article-ref rid="001-29"/>

    </group>
</group>
<group>
<group>
    <group>
        <title><![CDATA[Commentary]]></title>
            <title><![CDATA[Policy Forum]]></title>
                <title><![CDATA[Policy Forum1]]></title>
                <article-ref rid="001-29A"/>

    </group>
</group>
<group>
    <group>
        <title><![CDATA[Commentary]]></title>
            <title><![CDATA[Perspectives]]></title>
            <article-ref rid="001-30"/>
            <article-ref rid="001-31"/>
            <article-ref rid="001-32"/>
            <article-ref rid="001-33"/>
            <article-ref rid="001-34"/>
            <article-ref rid="001-35"/>
            <article-ref rid="001-36"/>

    </group>
</group>
<group>

        <title><![CDATA[Research Article]]></title>
        <article-ref rid="001-37"/>

</group>
<group>
        <title><![CDATA[Reports]]></title>
        <article-ref rid="001-38"/>
        <article-ref rid="001-39"/>
        <article-ref rid="001-40"/>
        <article-ref rid="001-41"/>
        <article-ref rid="001-42"/>
        <article-ref rid="001-43"/>
        <article-ref rid="001-44"/>
        <article-ref rid="001-45"/>
        <article-ref rid="001-46"/>
        <article-ref rid="001-47"/>
        <article-ref rid="001-48"/>
        <article-ref rid="001-49"/>
        <article-ref rid="001-50"/>
</group>
<group>
    <article-ref rid="001-51"/>
</group>
</articleorder>

*************************************************************************************
**********************OUTPUT XML********************************************

<group>
    <article-ref rid="001-1"/>
    <article-ref rid="001-2"/>
    <article-ref rid="001-3"/>
    <article-ref rid="001-4"/>
    <group>
        <title><![CDATA[News of the Week]]></title>
        <article-ref rid="001-5"/>
        <article-ref rid="001-6"/>
        <article-ref rid="001-7"/>
        <article-ref rid="001-8"/>
        <article-ref rid="001-9"/>
        <article-ref rid="001-10"/>
        <article-ref rid="001-11"/>
        <article-ref rid="001-12"/>
        <article-ref rid="001-13"/>
    </group>
    <group>
        <title><![CDATA[News Focus]]></title>
        <article-ref rid="001-14"/>
        <article-ref rid="001-15"/>
        <article-ref rid="001-16"/>
        <article-ref rid="001-17"/>
    </group>
    <article-ref rid="001-18"/>
<group>
        <title><![CDATA[Commentary]]></title>
        <group>
            <title><![CDATA[Letters]]></title>
            <article-ref rid="001-19"/>
            <article-ref rid="001-20"/>
            <article-ref rid="001-21"/>
            <article-ref rid="001-22"/>
            <article-ref rid="001-23"/>
            <article-ref rid="001-24"/>
            <article-ref rid="001-25"/>
            <article-ref rid="001-26"/>
        </group>
        <group>
                <title><![CDATA[Books et al.]]></title>
                <article-ref rid="001-27"/>
                <article-ref rid="001-28"/>
        </group>
        <group>
                <title><![CDATA[Policy Forum]]></title>
                <article-ref rid="001-29"/>
                <group>
                    <title><![CDATA[Policy Forum1]]></title>
                    <article-ref rid="001-29A"/>
                </group>
        </group>
        <group>
                <title><![CDATA[Perspectives]]></title>
                <article-ref rid="001-30"/>
                <article-ref rid="001-31"/>
                <article-ref rid="001-32"/>
                <article-ref rid="001-33"/>
                <article-ref rid="001-34"/>
                <article-ref rid="001-35"/>
                <article-ref rid="001-36"/>
        </group>
</group>
<group>
        <title><![CDATA[Research Article]]></title>
        <article-ref rid="001-37"/>
</group>
<group>
        <title><![CDATA[Reports]]></title>
        <article-ref rid="001-38"/>
        <article-ref rid="001-39"/>
        <article-ref rid="001-40"/>
        <article-ref rid="001-41"/>
        <article-ref rid="001-42"/>
        <article-ref rid="001-43"/>
        <article-ref rid="001-44"/>
        <article-ref rid="001-45"/>
        <article-ref rid="001-46"/>
        <article-ref rid="001-47"/>
        <article-ref rid="001-48"/>
        <article-ref rid="001-49"/>
        <article-ref rid="001-50"/>
</group>
    <article-ref rid="001-51"/>
</group>

************************************************************************

I have tried using the Hash concept to resolve this. but could not able to
fetch what is required. Any help would be greatly appreciated.

This is the script that i have tried with.
**********************SCRIPT*********************************
use XML::LibXML;
use Data::Dumper;
my %data;
my %hash;
my $parser = XML::LibXML->new();
$xml = "group.xml";
eval{
        $doc = $parser->parse_file($xml) or die("Cannot read the XML\n");
    };
    if($@){
        print "ERROR: 2: ".$xml." ==>> XML Parse Error\n";
    }
    else{
        $root = $doc->getDocumentElement;
        foreach my $group ($root->findnodes('/articleorder/group')){
            $title = $group->findvalue('./title');
            $p = 0;
            print "TTTT--> ".$title."\n";
            foreach my $art_ref($group->findnodes('./article-ref')){
                $ref_id = $art_ref->findvalue('./@rid');
                $p++;
                print "\tRef id --> ".$ref_id."\n";
                #$hash{$title}{$p} = $ref_id;
                &ada($p,$ref_id,$title);
            }

        }
         # foreach my $group ($root->findnodes('//group/group')){
            # foreach my $tit ($group->findnodes('./title')){
            # my $title = $tit->findvalue('.');
            # print "Title--> ".$title."\n";
            # }
            # $i = 0;
            # foreach my $article_ref ($group->findnodes('./article-ref')){
                # $i++;
                # my $ref_id = $article_ref->findvalue('./@rid');
                # print "\tReference id --> $title --> ".$ref_id."\n";
                # &ada($i,$ref_id,$title);
            # }

        # }
    }

print (Dumper(\%hash));



sub ada(){
    $item = shift;
    $value = shift;
    $t = shift;
    if($hash{group}{$t}{$item} eq ''){
        $hash{group}{$t}{$item} = $value;
    }
    else{
        $item++;
        &ada($item,$value,$t);
    }
}

***************************************************************



Chaitanya

Reply via email to