Как создать XML-файл вместо простого текстового файла? - PullRequest
0 голосов
/ 11 июня 2018

Я пробовал много способов создать файл XML, но не работает.Ниже приведен код для создания простого текстового файла.Может кто-нибудь предложить метод, как я могу создать файл XML вместо текстового файла в приведенном ниже коде?

#!/usr/bin/perl -w
use CGI;
use strict;
use warnings;
#use CGI::Carp qw(fatalsToBrowser);

my $q = new CGI;

print $q->header;
print $q->start_html(-title => "Line Calculation");
my $namex1 = $q->param('value_x1');
my $namex2 = $q->param('value_x2');
my $namey1 = $q->param('value_y1');
my $namey2 = $q->param('value_y2');
#entered values are printed:
print $q->h1("Calculation of slope and y-intercept");
print $q->ul(
$q->li(["<b>X1 value:</b> $namex1","<b>X2 value:</b> $namex2",
"<b>Y1 value:</b> $namey1", "<b>Y2 value:</b> $namey2"])
);

#calculation of slope and y-intercept is below:
my $slope1 = ($namey2-$namey1)/($namex2-$namex1);
print $q->h2("Slope(m) is $slope1"); 
my $inter = ($namey1-($slope1*$namex1));
print $q->h2("y-intercept(b) is $inter"); 

#file is processed below:
my $filename = 'file.txt';
open(my $fh, '>>', $filename) or die "Could not open file '$filename' $!";
print $fh "\n\nx1=$namex1, x2=$namex2, y1=$namey1, y2=$namey2\n";
print $fh "\nslope is $slope1, y-intercept is $inter\n\n";
close $fh;


open (MYFILE, '>data.xml');
print MYFILE qq{<?xml version="1.0" encoding="UTF-8"?>};
print MYFILE '<x1=$namex1, x2=$namex2, y1=$namey1, y2=$namey2>';
print MYFILE '<slope is $slope1, y-intercept is $inter>';
close (MYFILE);

print $q->li("\nall the list of data entered so far is accessible in file: 'file.txt' and 'data.xml'\n");

print $q->end_html;

Ответы [ 2 ]

0 голосов
/ 11 июня 2018

Вместо того, чтобы самостоятельно программировать все операции, проверьте пакеты, посвященные XML, такие как XML :: Writer или XML :: LibXML .

Даже в StackOverflowВы можете найти несколько примеров, как их использовать.

0 голосов
/ 11 июня 2018

Вот фрагмент вашего кода, который создает XML-файл.

open (MYFILE, '>data.xml');
print MYFILE qq{<?xml version="1.0" encoding="UTF-8"?>};
print MYFILE '<x1=$namex1, x2=$namex2, y1=$namey1, y2=$namey2>';
print MYFILE '<slope is $slope1, y-intercept is $inter>';
close (MYFILE);

Есть несколько вещей, которые я бы изменил, но в основном это работает.Вы открываете файл, записываете данные в файл и затем успешно закрываете файл.

Вот что вы в итоге получите data.xml (я заменил все ваши переменные на XXX, как и японятия не имею, какие значения они будут иметь):

<?xml version="1.0" encoding="UTF-8"?>
<x1=XXX, x2=XXX, y1=XXX, y2=XXX>
<slope is XXX, y-intercept is XXX>

Проблема в том, что это недопустимый XML.Для начала вам нужен корневой элемент, который охватывает все другие элементы в вашем документе.Примерно так, возможно:

<?xml version="1.0" encoding="UTF-8"?>
<data>
  <x1=XXX, x2=XXX, y1=XXX, y2=XXX>
  <slope is XXX, y-intercept is XXX>
</data>

Видите, как я добавил <data> ... </data> вокруг всех ваших других элементов?

А затем два элементачто вы добавили, просто не похожи на действительный XML.Допустимый элемент XML имеет имя и необязательные атрибуты.Ваш первый элемент близок.У него есть атрибуты, но нет имени.Возможно, это должно выглядеть так:

<coords x1=XXX, x2=XXX, y1=XXX, y2=XXX>

(Но я изобрел имя, coords, только вы можете знать, как оно должно называться.)

О, иэлемент XML должен быть закрыт.Самый простой способ - добавить «самозакрывающийся» слеш к концу элемента.

<coords x1=XXX, x2=XXX, y1=XXX, y2=XXX />

В основном (и я извиняюсь, если это звучит резко), чтобы создать файл XML,вам нужно знать, как выглядит XML-файл.И это действительно не похоже на тебя.Возможно, вам нужно почитать тему.Или, возможно, вам нужно получить больше информации от человека, который попросил вас создать файл XML.Попробуйте спросить у них спецификацию для формата XML.

Действительно, у вас все в порядке с Perl.Это не-Perl вещи, с которыми вам нужна помощь.И мы не те люди, которые помогут вам там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...