【问题标题】:Converting Text file to XML using PHP使用 PHP 将文本文件转换为 XML
【发布时间】:2011-12-03 21:41:27
【问题描述】:

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

但是没有结果,谁能帮我找出哪里出错了?

【问题讨论】:

    标签: php xml xml-parsing


    【解决方案1】:

    问题出在你的线路上:-

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

    【讨论】:

    • 我不知道你说的没有结果是什么意思,你能清楚一点。还可以先尝试写入文件,以便查看实际输出。一旦你有正确的,你可以再次发送到输出。
    • 当我执行代码时......我没有任何结果..plz你能通过邮件联系我 foufaskt@gmail.com....谢谢很多:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-18
    • 2015-01-24
    相关资源
    最近更新 更多