使用PHP将文本文件转换为XML

时间:2011-12-03 21:41:28

标签: php xml xml-parsing

我有几个.txt格式的文件(这些文件保存在文件夹中或在执行后从桌面打开)。

我想在PHP中构建一个应用程序,它可以检索这些文件并以XML格式保存,然后使用XSLT动态显示。

是否有任何方法可以让我这样做?

这是我现在的代码:

$fp = fopen('optim.txt', 'r');

$xml = new XMLWriter;
$xml->openURI('php://output');
$xml->setIndent(true); // makes output cleaner

$xml->startElement('qualité');
while ($line = fgetcsv($fp)) {

   $xml->startElement('qualité');
   $xml->writeElement('critere', $line[0]);
   $xml->writeElement('poids', $line[1]);
   $xml->writeElement('Vm', $line[2]);
   $xml->writeElement('SV', $line[3]);
   $xml->writeElement('critere', $line[4]);
   $xml->writeElement('poids', $line[5]);
   $xml->writeElement('Vm', $line[6]);
   $xml->writeElement('SV', $line[7]);
   $xml->writeElement('resultat', $line[8]);
   $xml->endElement();
}
$xml->endElement();

然而没有结果,有人能帮我找到我错的地方吗?

1 个答案:

答案 0 :(得分:0)

问题在于您的行: -

$xml->openURI('php://output');

这会将输出直接发送到客户端浏览器,我认为这是您想要做的。但是,您需要设置正确的标题以反映这一点。

在代码中添加以下行

header("Content-Type: text/xml");

您将直接在浏览器中看到输出。该行的位置并不重要,但必须在将任何内容发送到浏览器之前,最好将其放在$fp = fopen('optim.txt', 'r');之前

您还应该将最外层元素的名称更改为“qualité”的复数形式,以便您没有同名的父元素和子元素。

此外,在$xml->setIndent(true);添加此行$xml->startDocument();之后,否则您的xml将无效。

经过多一点挖掘之后,似乎必须设置默认时区(我不知道为什么),所以将其添加到脚本的开头: -

date_default_timezone_set("GMT"); //or whatever your default timezone is.

这意味着您的代码应如下所示: -

date_default_timezone_set("GMT"); //or whatever your default timezone is.
header("Content-Type: text/xml"); //Added as part of answer
$fp = fopen('optim.txt', 'r');

$xml = new XMLWriter;
$xml->openURI('php://output');
$xml->startDocument(); // added as part of answer
$xml->setIndent(true); // makes output cleaner

$xml->startElement('qualités'); //changed as part of answer
while ($line = fgetcsv($fp)) {

   $xml->startElement('qualité');
   $xml->writeElement('critere', $line[0]);
   $xml->writeElement('poids', $line[1]);
   $xml->writeElement('Vm', $line[2]);
   $xml->writeElement('SV', $line[3]);
   $xml->writeElement('critere', $line[4]);
   $xml->writeElement('poids', $line[5]);
   $xml->writeElement('Vm', $line[6]);
   $xml->writeElement('SV', $line[7]);
   $xml->writeElement('resultat', $line[8]);
   $xml->endElement();
}
$xml->endElement();