преобразование текста в xml с разделителями - PullRequest
0 голосов
/ 18 марта 2011

У меня есть текстовый файл, который мне нужно конвертировать в xml. Самая первая строка текста содержит заголовок, который будет выглядеть как теги xml. Каждая из других строк будет идти как значение тегов xml. Пример ввода (ABC.txt):

ID|Name|Subject|Marks
12|Sam|PHY,MATH|60
13|Gan|CHY|70
25|Rane|PHY|78

Это будет преобразовано в Output.xml:

<Record>
  <ID>12</ID>
  <Name>Sam</Name>
  <Subject>PHY,MATH</Subject>
  <Marks>60</Marks>
</Record>
<Record>
  <ID>13</ID>
  <Name>Gan</Name>
  <Subject>CHY</Subject>
  <Marks>70</Marks>
</Record>
<Record>
  <ID>25</ID>
  <Name>Rane</Name>
  <Subject>PHY</Subject>
  <Marks>78</Marks>
</Record>

Существует ли какой-либо модуль для достижения того же, что и XML :: CSV?

Спасибо

Человек

Ответы [ 3 ]

4 голосов
/ 18 марта 2011

Прочитайте ABC.txt в Text :: CSV (установите соответствующий разделитель), включите его в hasref и запишите с помощью XML::Simple

2 голосов
/ 18 марта 2011

XML :: Simple будет хорошо работать здесь; создайте хэш-карту ваших данных, передайте их в XML :: Simple, затем вызовите XMLout. Единственная реальная работа, которую вам нужно сделать, - это массировать ваши строки в хэш-карту ... разделить на '|' получить поля, и вы большую часть пути туда.

0 голосов
/ 18 марта 2011

Вы можете настроить временный файл, содержащий контент CSV, и передать его в XML::CSV:

 #!/usr/bin/perl -w
use strict;
use warnings;
use Data::Dumper;

open my $fh, '<', "abc.txt" or die "can't open input";
my @in_content = <$fh>;
close $fh;

my @tmp;
open my $out, '>', "temp.txt" or die "can't open tempfile";
foreach my $in(@in_content){
  print {$out} join(';', split(/\|/,$in));
}

close $out;

# now, you can use temp.txt as input for XML::CSV
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...