Windows Perl Scripting Forums » Scripts

XML tag closing in hierarchical manner

(1 post)
  • Started 1 year ago by mahalatchumi

  1. mahalatchumi
    Member

    Hi,I've problem in multilevel tag closing,i want to close the tags form the inner level then come to close its outer level

    <p_list-bull(1)>Use Microsoft Windows accessibility options to:
    <p_list-simple(2)>– Magnify the display
    <p_list-simple(2)>– Change the size of text and icons
    <p_list-simple(2)>– Convert the text displayed into speech (i.e. narrator)
    <p_list-simple(2)>– Change the contrast
    <p_list-simple(2)>– Display an onscreen keyboard
    <p_list-simple(2)>– Convert the mouse for left-handed use.
    <p_list-bull(1)>Deliver learning through an audio podcast rather than written handouts for visually impaired learners.
    <p_list-bull(1)>Increase the character size on handouts for visually impaired learners.
    <p_list-bull(1)>Adjust background colours and fonts to assist dyslexic learners.
    my output should be like the below code
    <list list-type="bullet">
    <list-item><p>Use Microsoft Windows accessibility options to:
    <list list-type="simple">
    <list-item><p>– Magnify the display</p></list-item>
    <list-item><p>– Change the size of text and icons</p></list-item>
    <list-item><p>– Convert the text displayed into speech (i.e. narrator)</p></list-item>
    <list-item><p>– Change the contrast</p></list-item>
    <list-item><p>– Display an onscreen keyboard</p></list-item>
    <list-item><p>– Convert the mouse for left-handed use.</p></list-item>
    </list></p></list-item>
    <list-item><p>Deliver learning through an audio podcast rather than written handouts for visually impaired learners.</p></list-item>
    <list-item><p>Increase the character size on handouts for visually impaired learners.</p></list-item>
    <list-item><p>Adjust background colours and fonts to assist dyslexic learners.</p></list-item>
    <list-item><p><xref ref-type="page" id="page_13"/>Provide feedback on written work using the comments facility and track changes rather than handwritten notes, so that the learners can change character size or use a text to speech application to hear feedback.</p></list-item>
    </list>
    i tried the below code but i gives single item list only i d't know where its wrong pls correct my mistake

    use strict;
    my $inputfile = $ARGV[0];

    open (IN,"$inputfile") || die ("Can't open the input file for reading");
    undef $/;
    my $str = <IN>;
    while($str =~ /<list-(bull)>(?:(?:(?!<\/list-bull>).)*)<\/list-\1>/sgi)
    {
    $str =~ s#<list-(bull)>(?:(?:(?!<\/list-bull>).)*)<\/list-\1>#&List_find($&)#sgie;

    }

    sub List_find
    {
    my $line = @_[0];
    my $currentlevel = 0;
    while($line =~ /^[\s\S]*?<(P_list-(\w+)\((\d+)\))>(.*?)<\/\1>\s*/si)
    {

    my ($tag, $kind, $level, $text) = ($1, $2, $3, $4);
    if ($currentlevel < $level) {
    while($currentlevel < $level) {
    $line = "\n<list list-type=\"$kind\">\n<list-item><p>";

    $currentlevel++;

    }

    } elsif ($currentlevel > $level) {

    while($currentlevel > $level) {
    $currentlevel--;
    $line ="</p></list-item>\n</list>\n";
    }
    $line = "</p></list-item>\n<list-item><p>";

    } else {

    $line = "</p></list-item>\n<list-item><p>";

    }
    $line .= $text;

    # print $line;

    }

    while($currentlevel > 0) {
    $currentlevel--;
    $line .= "</p></list-item>\n</list>\n";
    }

    #print $line;
    return "$line";
    }
    open (OUT,">$inputfile\.xml") || die ("Can't open the output file for writing");
    print OUT $str;
    close (OUT);

    Posted 1 year ago #

RSS feed for this topic

Reply

You must log in to post.