Привет всем,
Пожалуйста, извините, если есть какие-то грамматические ошибки.
У меня есть несколько XML-файлов в одном каталоге, мне нужно создать несколько XML-файлов в одном XML-файле. Примеры файлов, как это
file1:bvr.xml
<?xml version="1.0" encoding="UTF-8"?>
<specification xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<details>
<name>johan</name>
<address>Langgt 23</address>
---more info---
</details>
</specification>
file2:kvr.xml
<?xml version="1.0" encoding="UTF-8"?>
<specification xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<details>
<name>venu</name>
---more info---
</details>
</specification>
file3:svr.xml
<?xml version="1.0" encoding="UTF-8"?>
<specification xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<details>
<name>kent</name>
---more info----
</details>
</specification>
file4:tvr.xml
<?xml version="1.0" encoding="UTF-8"?>
<specification xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<definition>
<name>kent</name>
----more info---
</definition>
</specification>
Мне нужно создать один XML-файл, подобный этому.
new.xml
<?xml version="1.0" encoding="UTF-8"?>
<specification xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<details>
<name>johan</name>
<address>Langgt 23</address>
--more info--
</details>
<details>
<name>venu</name>
---more info----
</details>
<details>
<name>kent</name>
<address>vadrss 25</address>
---more info--
</details>
<definition>
<name>kent</name>
----more info----
</definition>
</specification>
Я пытался так, но у меня есть некоторые проблемы с этим сценарием.
#!/usr/bin/perl
use warnings;
use strict;
use File::Find;
use XML::LibXML::Reader;
use Data::Dumper;
my $Number;
my $dir="C:/file/sav";
find(\&wanted, $dir);
sub wanted() {
if ( -f and /(\.xml)$/) {# find all the files with a suffix of .xml
my $reader = XML::LibXML::Reader->new( location =>$_ )
or die "cannot read file.xml\n";
while ($reader->nextElement( 'details' ) ){
$Number = $reader->readOuterXml();
print "$Number\n";
}
}
return;
}
но у меня есть две проблемы в этом скрипте
1) Я извлекаю информацию из всех XML-файлов, имеющих элемент Node «details», но в одном XML-файле у меня есть данные с другим «определением» элемента Node. Я не извлекаю эту информацию, Что мне делать, если я хочу извлечь эту информацию и сохранить в той же переменной.
2) После извлечения всей информации, хранящейся в переменной $Number
, я хочу сохранить информацию о переменной $Number
в одном файле XML, как я могу это сделать. Пожалуйста, помогите мне. Я очень плохо знаком с Perl.
(or)
Существуют ли другие способы объединения данных всех файлов XML в один файл XML.
После того как вы попробовали свой код, как вы сказали, он дает еще несколько ошибок
#!/usr/bin/perl
use warnings;
use strict;
use XML::LibXML;
my @xml_files = glob '*.xml';
my $bigXML = XML::LibXML::Document->new( '1.0', 'UTF-8');
my $aggregated; for my $xml_file ( @xml_files ) {
my $doc = XML::LibXML->new->parse_file( $xml_file );
my ( $specNode ) = $doc->findnodes( '//Specification' );
if ( $aggregated ) {
$aggregated = $specNode;
}
else {
my @details = $specNode->findnodes( './details' );
$aggregated->addChild( $_ ) foreach @details;
}
}
$bigXML->adoptNode( $aggregated );
$bigXML->toFile( 'aggregated_data.xml' );
выдает ту же ошибку, что я просил до can't call method "findnodes" on an undefined value
, я пытался заменить точку с косой чертой в строке с подробностями, и это выдает ту же ошибку.
и если попытаться использовать функцию golb, как это
my @xml_files = glob '*dtc.xml';
в приведенном выше коде на этот раз выдает другую ошибку, такую как
XML::LibXML::Document::adoptNode()-- Node is not a blessed SV reference at line 21
Я борюсь с этими ошибками, потому что это очень новый модуль для меня, а также я изучил этот документ, все в правильном формате, но я не могу понять эти ошибки. Я очень новичок в этом Perl, может помочь мне.