Perl XML анализатор получить XML-контент в XML - PullRequest
0 голосов
/ 24 июня 2011

Как я могу использовать XMLParser, чтобы получить элемент -> @ url, item -> @ replace и item -> "value inside" для содержимого в виде строки узла, где item -> @ cone = "one"?

<cstep>
  <item  cone="one" 
         url="http://google.com/{ccc}/cthree"
         replace="{ccc}">
            <itemsub conesub="conesub">
                    <itemsubsub  conesubsub="conesubsub" />
            </itemsub>       
  </item>
  <item  cone="two" 
         url="http://google.com/{ccc}/cthree"
         replace="{ccc}">
            <itemsub conesub="conesub">
                    <itemsubsub  conesubsub="conesubsub" />
            </itemsub>       
  </item>
</cstep>

1 Ответ

3 голосов
/ 24 июня 2011

XML :: Twig :

use warnings;
use strict;
use XML::Twig;

my $str = <<EOF;
    <cstep>
      <item  cone="one" 
             url="http://google.com/{ccc}/cthree"
             replace="{ccc}">
                <itemsub conesub="conesub">
                        <itemsubsub  conesubsub="conesubsub" />
                </itemsub>       
      </item>
      <item  cone="two" 
             url="http://google.com/{ccc}/cthree"
             replace="{ccc}">
                <itemsub conesub="conesub">
                        <itemsubsub  conesubsub="conesubsub" />
                </itemsub>       
      </item>
    </cstep>
EOF

my $t = XML::Twig->new(twig_handlers => {'cstep/item' => \&item });
$t->parse($str);

sub item {
    my ($t, $item) = @_;
    if ($item->att('cone') eq 'one') {
        print $item->att('url'    ), "\n";
        print $item->att('replace'), "\n";
    }
}

__END__

http://google.com/{ccc}/cthree
{ccc}

ОБНОВЛЕНИЕ: Чтобы ответить на вопрос в комментариях о назначении $url вне подпрограммы:

my $t = XML::Twig->new(twig_handlers => {'cstep/item' => \&item });
my $url;
$t->parse($str);
print "$url\n";

sub item {
    my ($t, $item) = @_;
    if ($item->att('cone') eq 'one') {
        $url = $item->att('url');
        print $item->att('replace'), "\n";
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...