如何创建XML文件而不是纯文本文件?

时间:2018-06-11 00:03:55

标签: xml perl

我尝试了很多方法来创建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 :(得分:0)

以下是创建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的东西。我们不是帮助你的合适人选。

答案 1 :(得分:0)

不是自己编写所有操作,而是检查专门用于XML的包, 例如 XML :: Writer XML :: LibXML

即使在StackOverflow上,您也可以找到一些如何使用它们的示例。