2017-11-16 6 views
0

Ich habe nach einer Antwort auf diese Frage gesucht, aber ich konnte keine Antwort finden, die für meine Anwendung funktioniert.mit <! [CDATA in xml Antwort

Ich muss eine Antwort von einer SQL-Abfrage im XML-Format geben, aber die Antwort ist eine URL, so dass ich cdata verwenden muss. Hier ist mein Code.

if ($_POST['action']=="getSermon") 
{ 
    //echo"You got it"; 
    $SQL = "SELECT * FROM sermons"; 

    $allsermon = mysql_query($SQL); 
    $sermonrow = mysql_fetch_assoc($allsermon); 

    header('Content-type: text/xml; charset=utf-8'); 
    header('Pragma: public');   
    header('Cache-control: private'); 
    header('Expires: -1'); 
    $xml = '<?xml version="1.0" encoding="utf-8"?>'; 
    echo $xml; 
    echo "<SERMON_INFO>"; 
    do { 
     echo "<SERMON>";  
     echo "<ID>" . $sermonrow['id'] . "</ID>"; 
     echo "<NAME>" . $sermonrow['Name'] . "</NAME>"; 
     echo "<URL>".<![CDATA[$sermonrow['url']]>."</NAME>"; 
     //echo "<URL>". $sermonrow['url'] . "</URL>"; 
     echo "</SERMON>"; 
     mysql_free_result($result); 
    } while ($sermonrow = mysql_fetch_assoc($allsermon)); 
    mysql_free_result($allsermon); 
    echo "</SERMON_INFO>"; 
    mysql_close($db); 

    } 

Wenn ich dies tue bekomme ich einen Fehler 500 und die Seite wird nicht geladen.

+0

Sie sollten Ihre 'do-> while' in eine normale' while' Schleife ändern, um den unnötigen doppelten 'mysql_fetch_assoc()' Aufruf zu entfernen – Scuzzy

Antwort

1

Die korrekte Syntax ist

echo "<URL><![CDATA[".$sermonrow['url']."]]></URL>"; 

Aber ich würde lieber verwenden Sie eine XML-Bibliothek wie DOMDocument oder SimpleXML Ihr Dokument zu bauen, komplexer, aber Sie werden weniger anfällig für einfache Fehler wie Vermischung ein schließender Tag-Name (siehe </NAME>).