【发布时间】:2015-04-24 20:41:46
【问题描述】:
我有一些看起来像这样的 XML:
<?xml version="1.0" encoding="UTF-8"?>
<DataSet>
<Category>
<Name mode="source">somename</Name>
<Name mode="destination">someothername</Name>
<Content>Some text here</Content>
</Category>
</DataSet>
我要做的是处理“类别”,并根据上下文提取不同的名称。
我尝试使用 children 对其进行迭代 - 这很有效:
use strict;
use warnings;
use XML::Twig;
sub process_category {
my ( $twig, $category ) = @_;
my $cat_name;
foreach my $name ( $category->children('Name') ) {
if ( $name->att('mode') eq 'source' ) {
$cat_name = $name->text;
}
}
print "$cat_name ", $category->first_child_text('Content'), "\n";
}
my $twig =
XML::Twig->new( twig_handlers => { 'Category' => \&process_category } )
->parse( \*DATA );
__DATA__
<?xml version="1.0" encoding="UTF-8"?>
<DataSet>
<Category>
<Name mode="source">somename</Name>
<Name mode="destination">someothername</Name>
<Content>Some Text</Content>
</Category>
</DataSet>
但是我想知道 - 有没有比迭代元素更好的方法?我不知道first_child 是否支持属性搜索,或者是否有另一种方法可以做到这一点。
【问题讨论】: