首页 > 解决方案 > 如何创建 XML 文件而不是纯文本文件?

问题描述

我尝试了很多方法来创建 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;

标签: xmlperl

解决方案


这是您创建 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 内容。而且我们不是帮助您的合适人选。


推荐阅读