Создание / запись файла XML на PHP? - PullRequest
0 голосов
/ 07 марта 2012

В настоящее время у меня есть скрипт, написанный на PHP, где я подключаюсь к базе данных в phpMyAdmin, а затем анализирую все значения таблицы в XML-документе.

Вот как работает скрипт:

    $xmlBody .= "<XML>";
$sql_news = mysql_query("SELECT * FROM news_table");

$xmlBody .= "<News_Table>";

//this while loop churns out the values of our "news_table" table
while($row_news = mysql_fetch_array($sql_news)){
    // Set DB variables into local variables for easier use 
    $id_news = $row_news["news_id"];
    $author_news = $row_news["news_author"];
    $time_news = $row_news["news_time"];
    $title_news = $row_news["news_title"];
    $content_news = $row_news["news_content"];
    $desc_news = $row_news["news_description"];
    $image_news = $row_news["news_image"];

    $xmlBody .= '
<News_Table_Entry> 
    <DataID>' . $id_news . '</DataID> 
    <DataAuthor>' . $author_news . '</DataAuthor>
    <DataTime>' . $time_news . '</DataTime>
    <DataTitle>' . $title_news . '</DataTitle>
    <DataContent>' . $content_news . '</DataContent> 
    <DataDesc>' . $desc_news . '</DataDesc>
    <DataImage>' . $image_news . '</DataImage>
</News_Table_Entry>';
} // End while loop

$xmlBody .= "</News_Table>";

mysql_close(); // close the mysql database connection
$xmlBody .= "</XML>";
echo $xmlBody; 
?>

Как мне создать и вывести это как внешний XML file? Я успешно получил этот скрипт, но использование всех методов для записи в XML не работает. Использование

echo 'Wrote: ' . $doc->save("/tmp/test.xml") . ' bytes'; // Wrote: 72 bytes

Функция не работает, также как и функция fwrite. Я работал над попыткой выяснить это в течение нескольких дней, но ни одно из предложенных мне решений не сработало. Буду признателен за любую помощь или понимание!

Ответы [ 4 ]

2 голосов
/ 07 марта 2012

Согласно вашему коду, вы уже сами создаете XML-контент.XML-файлы - это обычные текстовые файлы, поэтому в этом случае вам не нужны никакие специальные функции XML, которые проверяют и визуализируют.Вместо этого вы можете просто сохранить свой текст в XML-файле:

file_put_contents('/tmp/test.xml', $xmlBody);

file_put_contents позволяет отказаться от всех функций fopen / fwrite, так что это самый простой способ написатьсодержимое на диск.


С другой стороны, если вы хотите научиться создавать структурированный XML-документ со всеми наворотами, посмотрите SimpleXMLили XMLWriter.В этом случае немного больше накладных расходов, но выполнение всей разметки вручную может быть громоздким, особенно если одна опечатка может сделать недействительным весь ваш документ.

0 голосов
/ 07 марта 2012
  • Просто чтобы понять, работает ли ваша строка echo $xmlBody; хотя бы так, как ожидалось?

  • И если вы пытаетесь использовать файл XML где-то безуспешно, обратите внимание, что в первой строке файла XML отсутствует заголовок XML.

    <?xml version="1.0"?>
    
  • Обратите внимание, что в зависимости от данных в вашей базе данных в этом заголовке может потребоваться указать более широкую кодировку, например UTF-16. Но вы должны выбрать, какие наборы символов вы хотите разрешить в этой базе данных.

    <?xml version="1.0" encoding="UTF-16"?>
    
  • И каков трейлинг ?> в конце вашего примера кода?

0 голосов
/ 07 марта 2012

Вы пробовали file_put_contents('/path/to/output.xml', $xmlBody);

0 голосов
/ 07 марта 2012

Это вам поможет

$xml_msg_in = fopen('/tmp/test.xml',"w");
fwrite($xml_msg_in,$xmlBody); 
fclose($xml_msg_in);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...