У меня есть этот XML-файл, и мне нужно обращаться к определенным узлам по одному.Ниже приведен пример моего XML вместе с моим примером кода.
Мой код работает нормально, за исключением того, что я перебираю все теги Message / Content вместо того, чтобы просто получать определенный тег Message / Content под текущим Message.тег.Например, я получу 3 тэга Message / Content, когда обрабатывается текущий тэг Message (тэг с refid = "123991123"), когда я хочу вернуть только 1 ().Надеюсь, это имеет смысл.Любая помощь здесь будет оценена.
Код:
my $twig = XML::Twig->new(
twig_handlers => {
Selection => sub {
foreach my $message ($_->findnodes('./Contents/Message')) {
if($message->att('custom')){
$Message_custom = $message->att('custom');
foreach my $Content ($_->findnodes('./Contents/Message/Content')) {
print $Selection_id.": ".$Message_refid.": ".$TotalContents++."\n";
if($Content->att('language') eq "en"){
if($Content->att('imagelibraryid')){
$Message_Content_language_en_imagelibraryid = $Content->att('imagelibraryid');
}else{
$Message_Content_language_en = substr($message->field('Content'), 0, 20);
}
}
}
}
}
},
}
);
XML:
<?xml version="1.0" encoding="UTF-8"?>
<Root>
<Selection id="54008473">
<Name>Master</Name>
<Contents>
<Message refid="125796458" suppress="true" status="Unchanged"/>
<Message refid="123991123" suppress="true" status="Unchanged">
<Content language="en" imagelibraryid="5492396"/>
</Message>
<Message refid="128054778" custom="true" status="New">
<Content language="en"><![CDATA[<p>Some English content</p>]]></Content>
<Content language="fr"><![CDATA[<p>Some French content</p>]]></Content>
</Message>
</Contents>
</Selection>
<Selection id="54008475" datavaluerefid="54008479">
<Name>RMBC</Name>
<Contents>
<Message refid="125796458" sameasparent="true" parentrefid="54008473" status="Unchanged"/>
<Message refid="123991123" sameasparent="true" parentrefid="54008473" status="Unchanged"/>
<Message refid="128054778" custom="true" status="New">
<Content language="en"><![CDATA[<p>ada</p>]]></Content>
</Message>
</Contents>
</Selection>
</Root>