我有几个.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();
然而没有结果,有人能帮我找到我错的地方吗?
答案 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();