Я пытался разделить данные XML с помощью XML::LibXML
модуль, но он выдает ошибку, как этотОшибка при попытке разделить XML-файл с помощью модуля XML :: Libxml
Can't call method "findnodes" without a package or object reference
Мой вход
<xml>
<bhap id="1">
<label>cylind - I</label>
<title>premier</title>
<rect id="S1">
<title>Short</title>
<label>1.</label>
<p><text>welcome</text></p>
</rect>
<rect id="S2">
<title>Definite</title>
<label>2.</label>
<p><text>welcome1</text></p>
</rect>
</bhap>
<bhap id="2">
<label>cylind – II</label>
<title>AUTHORITIES AND ITS EMPLOYEES</title>
<rect id="S3">
<title>nauty.—</title>
<label>3.</label>
<p><text>welcome3</text></p>
</rect>
<rect id=S4">
<title>Term</title>
<label>4.</label>
<p><text>welcome4</text></p>
</rect>
</bhap>
</xml>
выход необходим
файл 1
<xml>
<bhap id="1">
<label>cylind - I</label>
<title>premier</title>
<rect id="S1">
<title>Short</title>
<label>1.</label>
<p><text>welcome</text></p>
</rect>
</bhap>
</xml>
файл 2
<xml>
<bhap id="1">
<label>cylind - I</label>
<title>premier</title>
<rect id="S2">
<title>Definite</title>
<label>2.</label>
<p><text>welcome1</text></p>
</rect>
</bhap>
</xml>
файл 3
<xml>
<bhap id="2">
<label>cylind – II</label>
<title>AUTHORITIES AND ITS EMPLOYEES</title>
<rect id="S3">
<title>nauty.—</title>
<label>3.</label>
<p><text>welcome3</text></p>
</rect>
</bhap>
</xml>
файл 4
<xml>
<bhap id="2">
<label>cylind – II</label>
<title>AUTHORITIES AND ITS EMPLOYEES</title>
<rect id=S4">
<title>Term</title>
<label>4.</label>
<p><text>welcome4</text></p>
</rect>
</bhap>
</xml>
мой код
use XML::LibXML;
my $file = shift || die "usage $0 <xmlfile>";
my $parser = XML::LibXML->new();
my $doc = $parser->parse_file($file);
my @nodes = $doc->findnodes('//bhap');
foreach my $node1 (@nodes) {
my $bhap = $node1->toString(), "\n";
if ($bhap =~ m/(<bhap.+?>.+?<\/title>)(.+?)(<\/bhap>)/is) {
my $bhap1 = $1;
my $bhap2 = $2;
my $bhap3 = $3;
my $nodes1 = $bhap->findnodes('//rect');
foreach my $node (@$nodes1) {
my $rect = $node->toString();
if ($rect =~ m/(<rect\s*id="(.+?)">.+?<\/rect>)/is) {
my $var1 = $1;
my $var2 = $2;
print "file" $var2;
print "<xml>" print $bhap1;
print $var1;
print $bhap3;
print "</xml>";
}
}
}
}
Это xml_split вариант: http://search.cpan.org/dist/XML-Twig/tools/xml_split/xml_split – Sobrique
Вы назначаете '$ bhap' и т. Д., Затем читаете из' $ bhap'. Использование 'use warnings; используйте строгий, 'ловит такого рода вещи. – reinierpost
'my $ nodes1 = $ bhap-> findnodes ('// rect');' Вы вызываете 'findnodes' строку здесь. – nwellnhof