2016-07-20 3 views
0

Моя попытка создать xml-файл почти завершена, но у меня есть одна или две ошибки.Создайте правильный формат XML с помощью php

данные извлекается из БД через mysql_connect()

$sql = "SELECT `entity_id`,`name` FROM `table` 

Нужный результат:

<?xml version="1.0" encoding="utf-8"?> 
<content> 
    <item> 
     <id>1</id> 
     <name><![CDATA[name1]]</name> 
    </item> 
    <item> 
     <id>2</id> 
     <name><![CDATA[name2]]</name> 
    </item> 
</content> 

Теперь я пытался сделать это с помощью DOMDocument, но я не могу получить отступ правильно

$doc = new DOMDocument('1.0', 'utf-8'); 
$ele = $doc->createElement('content'); 

    while ($row = mysql_fetch_assoc($res)) { 

    $ele = $doc->createElement('id'); 
    $ele->nodeValue = $row['entity_id']; 
    $doc->appendChild($ele); 

    $ele = $doc->createElement('name'); 
    $ele->nodeValue = $row['name']; 
    $doc->appendChild($ele); 

    }; 

$doc->appendChild($ele); 
$doc->save('MyXmlFile.xml'); 

, но это выходы:

<?xml version="1.0" encoding="utf-8"?> 
    <id>1</id> 
    <name>name1</name> 
    <id>2</id> 
    <name>name2</name> 

Как поместить результаты на уровень ребенка? (основная проблема), и после этого мне нужно выяснить, как обернуть тег CDATA вокруг текстовых данных?

+0

Используйте [XMLWriter] (http://php.net/manual/en/book.xmlwriter.php) – RiggsFolly

ответ

0

ли идти по пути XMLWriter, чтобы исправить это:

$xml = new XMLWriter(); 

$xml->openURI('myxmlfile.xml'); 
$xml->startDocument('1.0', 'utf-8'); 
$xml->setIndent(true); 
$xml->startElement('content'); 

while ($row = mysql_fetch_assoc($res)) { 

    $xml->startElement('item'); 

     $xml->startElement("id"); 
     $xml->writeRaw("$row['entity_id']); 
     $xml->endElement(); 

     $xml->startElement("name"); 
     $xml->writeCData(utf8_encode ($row['name'])); 
     $xml->endElement(); 

    $xml->endElement(); 
    } 

$xml->endElement(); 

$xml->flush();