У меня есть много файлов XML в каталоге, который нужно сортировать и объединять в один файл. Файлы в следующем формате:Сортировка и слияние XML-документов с Perl/XML :: Twig
File1.xml:
<?xml version="1.0" encoding="utf-8"?>
<doctypea>
<header someattr="1">
<docnumber>111</docnumber>
</header>
</doctypea>
File2.xml:
<?xml version="1.0" encoding="utf-8"?>
<doctypea>
<header someattr="1">
<docnumber>112</docnumber>
</header>
</doctypea>
File3.xml:
<?xml version="1.0" encoding="utf-8"?>
<doctypeb>
<header someattr="1">
<docnumber>111</docnumber>
</header>
</doctypeb>
File4.xml:
<?xml version="1.0" encoding="utf-8"?>
<doctypeb>
<header someattr="1">
<docnumber>112</docnumber>
</header>
</doctypeb>
Все файлы в этом каталоге должны быть отсортированы по следующим критериям:
- НомерДокумента
- DOCTYPE (а или б)
Затем их нужно объединить, поэтому выходной файл должен выглядеть так:
<?xml version="1.0" encoding="utf-8"?>
<doctypea>
<header someattr="1">
<docnumber>111</docnumber>
</header>
</doctypea>
<doctypeb>
<header someattr="1">
<docnumber>111</docnumber>
</header>
</doctypeb>
<doctypea>
<header someattr="1">
<docnumber>112</docnumber>
</header>
</doctypea>
<doctypeb>
<header someattr="1">
<docnumber>112</docnumber>
</header>
</doctypeb>
Для этого я пытаюсь использовать XML: Twig in Perl. У меня есть следующий код до сих пор:
use XML::Twig;
my $xmldir = "/xmlfiles";
my $parser = XML::Twig->new(pretty_print => 'indented');
opendir(DIR, "$xmldir");
my @FILES= readdir(DIR);
closedir(DIR);
foreach (@FILES) {
if ($_ ne "." && $_ ne "..") {
print "reading file: $xmldir/$_\n";
$parser->parsefile("$xmldir/$_");
}
}
На данный момент я не могу показаться, чтобы выяснить правильный синтаксис, чтобы получить элементы, которые я хочу от парсера.
1. Как получить значение корневого элемента ("doctypea" или "doctypeb")?
2. Я предполагаю, что мне нужно, чтобы (1), чтобы parsenode до поля docnumber?
Мой план заключается в том, чтобы построить какой-то из них с номером doctype%, чтобы сортировать, я не уверен, что самый простой способ объединить их с этим.
Цените любые рекомендации!
Это не файлы XML.Они отклоняются XML-Twig и любым другим процессором XML, и это справедливо. Значения атрибутов должны быть указаны, а имена начального и конечного тегов каждого корневого элемента должны совпадать. – daxim
Извините, что это было мое ручное издевательство над простым примером, который сделал их недействительными. Они являются действительными файлами XML. Я исправил пример. – ChuckMac