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

使用PHP将文本文件转换为XML,php,xml,xml-parsing,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

我有几个.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();

但是没有结果,有人能帮我找出哪里出了问题吗?

问题在于您的线路:-

$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();

我不知道你所说的没有结果是什么意思,你能再清楚一点吗。还可以先尝试写入文件,以便查看实际输出。当我执行代码时……我没有任何结果……请你通过邮件与我联系好吗foufaskt@gmail.com....thnks很多:)