как преобразовать простой XML-файл в читаемый формат

#xml #perl #parsing #xml-simple

#xml #perl #синтаксический анализ #xml-простой

Вопрос:

Здесь новичок в Perl. Может кто-нибудь любезно показать мне, как использовать perl для извлечения данных из этого XML-файла и форматирования выходных данных в любом случае, в котором я нуждаюсь? Буду ли я использовать XML :: Simple или открою это как fh и как-то разделю его? Спасибо.

Документация по использованию XML::Simple мне не кажется простой.

Например, у меня есть небольшой XML-файл, который выглядит следующим образом.

test.xml

 <?xml version="1.5" encoding="UTF-8"?><org.apache.Content duration="277135" count="51" numDirs="50" bytesUsed="110133451"/>
  

Я хотел бы преобразовать пары атрибут = «значение», чтобы их можно было читать как CSV-файл, : или, тем не менее, я хочу распечатать это.

Пример:

 duration:277135 count:51 numDirs:50 bytesUsed:110133451
  

Ответ №1:

 Use XML::Simple - Easy API to maintain XML (esp config files) or 
see XML::Twig - A perl module for processing huge XML documents in tree mode.

use strict;
use warnings;
use XML::Simple;
use Data::Dumper;

my $xml = q~<?xml version="1.5" encoding="UTF-8"?>
<org.apache.Content duration="277135" count="51" numDirs="50" bytesUsed="110133451"/>~;

print $xml,$/;

my $data = XMLin($xml);

print Dumper( $data );

foreach my $attributes (keys %{$data}){
  print"$attributes : ${$data}{$attributes}n";
}
  

Вывод:

 bytesUsed : 110133451
numDirs : 50
count : 51
duration : 277135
  

Комментарии:

1. спасибо за вашу помощь. можно $xml также прочитать как файл, если содержимое было в отдельном XML-файле? как бы мне это сделать?

2. да, вы можете сделать это, просто указав путь к xml-файлу, например my $xml = "pathtotest.xml";

Ответ №2:

Поскольку XML::Simple не рекомендуется для нового кода самим автором…

Использование этого модуля в новом коде не рекомендуется. Доступны другие модули, которые обеспечивают более простые и согласованные интерфейсы. В частности, настоятельно рекомендуется использовать XML::LibXML.

возможно, вам будет интересно ознакомитьсяhttps://metacpan.org/pod/XML::LibXML::Simple.

Этот модуль представляет собой грубую перепись XML::Simple (автор Grant McLean) для использования синтаксического анализатора XML ::LibXML для структур XML, где в оригинале используются простые синтаксические анализаторы Perl или SAX.