Php kullanarak yanıt olarak bir xml dosyasının içeriğini gönderme

5 Cevap php

I wrote xml to a file using php, and then I sent the file data as a response to the client's browser. But, I'm getting the following error: XML Parsing Error: not well-formed Below, is my code. Any way to fix this?

$file= fopen("result.xml", "w");
$_xml ="<?xml version=\"1.0\" encoding=\"UTF-8\" ?>";
$_xml .="<friends>";
$timestamp = time();
$_xml.="<date>".date("F jS, Y", $timestamp)."</date>"; //Like December 23rd, 2009
$_xml .="<total>".$totalResults."</total>";
foreach($friendList as $key => $value) { /*$friendList contains key value pairs*/
    $_xml.="<friend>";
    $_xml.="<name>".$key."</name>";
    $_xml.="<webpage>".$value."</webpage>";
    $_xml.="</friend>";
}
$_xml .="</friends>";
fwrite($file,$_xml);
fclose($file);

//Send the xml file as response
header('Content-type: text/xml');
readfile('result.xml');

Thank You

5 Cevap

Kod parçacığını size $friendList herhangi bir veri olmaksızın ince işleri yayınlanmıştır, bu yüzden sorun verileri ile yatıyor.

Ben böyle & gibi karakterler içerebilir ki, sizin <webpage></webpage> etiketleri içinde URL'leri çıktısı olduğunuzu tahmin için gidiyorum. XML & ' " > < karakter kaçtı gerektirir. Neyse ki, htmlspecialchars() tam olarak bunu yapıyor.

Bu kullanmayı deneyin:

$_xml.="<webpage>".htmlspecialchars($value,ENT_QUOTES)."</webpage>";

Bir de verilerin diğer parçaları kaçmak için kötü bir fikir değil.

Sen hiç açılmayan bir kapanış "arkadaş" etiketi var. Ile ilgili Snipper değiştirin:

$_xml .="<friends>";
foreach($friendList as $key => $value) { /*$friendList contains key value pairs*/
    $_xml.="<friend>";
    $_xml.="<name>".$key."</name>";
    $_xml.="<webpage>".$value."</webpage>";
    $_xml.="</friend>";
}
$_xml .="</friends>";

: XMLWriter çok daha kolay ve temiz kod bu tür yazmak için yapar gibi somethring kullanma

$xml_writer = new XMLWriter();
$xml_writer->openMemory();

$xml_writer->startDocument('1.0', 'UTF-8', 'yes');
...
$xml_writer->startElement('friends');
...
$xml_writer->endElement(); //friends
...
$data = $xml_writer->outputMemory();
echo($data);

Dizi $friendList tuşları ve / veya değerler olduğunu olası onlara etiket (ler) var. Bu durumda bizim XML dizesi $_xml geçerli bir XML olmayacaktır.

Alma XML im bu gibi:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<friends><date>December 23rd, 2009</date><total>2</total><friend><name>ABC</name><url>http://www.somesite.org/abc</url></friend><friend><name>PQR</name><url>http://www.somesite.org/pqr</url></friend></friends>

Bu hizmet öncesi bir dosyaya yazmak için hiçbir sebep yoktur. Doğrudan müşteriye sadece çıkış:

$_xml .="</friends>";
//Send the xml file as response
header('Content-type: text/xml');
echo $_xml;