Как я могу загрузить XML и сохранить его с помощью PHP?

0

эй, ребята, я пытаюсь разобрать xml (feeds) и сохранить его с помощью php (я на полпути). Я уже успеваю загрузить xml и отобразить только те данные, которые мне нужно отображать. Как я могу сохранить xml?

это мой код:

 <?php

$html = "";
$url = "http://www.conciencia.net/rss.aspx";
$xml = simplexml_load_file($url);

$channel_title = $xml->channel->title;
$channel_link = $xml->channel->link;
$managingEditor = $xml->channel->managingEditor;
$channel_description = $xml->channel->description;
$lbd = $xml->channel->lastBuildDate;

$html .= "<br/>$channel_title";
$html .= "<br/>$channel_link";
$html .= "<br/>$managingEditor";
$html .= "<br/>$lbd"; 
$html .= "<br/>$channel_description<br/>";

for($i = 0; $i < 7; $i++){

    $pubDate = $xml->channel->item[$i]->pubDate;
$title = $xml->channel->item[$i]->title;
$link = $xml->channel->item[$i]->link;
    $guid = $xml->channel->item[$i]->guid;
    $author = $xml->channel->item[$i]->author;
$description = $xml->channel->item[$i]->description;
    $url0 = $xml->channel->item[$i]->enclosure->attributes()->url;

    for($ii = 0; $ii < 2; $ii++){
    $url = $xml->channel->item[$i]->enclosure[$ii]->attributes()->url;
   }

    $html .= "<br/>$pubDate";     
    $html .= "<a href='$link'><h3>$title</h3></a>";
    $html .= "<br/>$guid";
    $html .= "<br/>$author";
    $html .= "<br/>$description";
    $html .= "<br/>$url0";
    $html .= "<br/>$url";
    $html .= "<br/>$link<br/>"; 
}

echo $html;

?>

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

myxml.xml

<channel>
                <title>$channel_title</title>
                <link>$channel_link</link>
                <managingEditor>$managingEditor</managingEditor>
                <channel_description>$channel_description</channel_description>
                <item>
                       <title>$title</title>
                       <guid>$guid</guid>
                       <author>$author</author>
                       <description>$description</description>
                       <enclosure0>$url0</enclosure0>
                       <enclosure1>$url</enclosure>

                </item>
                <item>
                       <title>$title</title>
                       <guid>$guid</guid>
                       <author>$author</author>
                       <description>$description</description>
                       <enclosure0>$url0</enclosure0>
                       <enclosure1>$url</enclosure>

                </item>
                <item>
                       <title>$title</title>
                       <guid>$guid</guid>
                       <author>$author</author>
                       <description>$description</description>
                       <enclosure0>$url0</enclosure0>
                       <enclosure1>$url</enclosure>

                </item>
                <item>
                       <title>$title</title>
                       <guid>$guid</guid>
                       <author>$author</author>
                       <description>$description</description>
                       <enclosure0>$url0</enclosure0>
                       <enclosure1>$url</enclosure>

                </item>
                <item>
                       <title>$title</title>
                       <guid>$guid</guid>
                       <author>$author</author>
                       <description>$description</description>
                       <enclosure0>$url0</enclosure0>
                       <enclosure1>$url</enclosure>

                </item>
                <item>
                       <title>$title</title>
                       <guid>$guid</guid>
                       <author>$author</author>
                       <description>$description</description>
                       <enclosure0>$url0</enclosure0>
                       <enclosure1>$url</enclosure>

                </item>
                <item>
                       <title>$title</title>
                       <guid>$guid</guid>
                       <author>$author</author>
                       <description>$description</description>
                       <enclosure0>$url0</enclosure0>
                       <enclosure1>$url</enclosure>

                </item>
</channel>
  • 0
    Вы должны экранировать свои переменные в HTML, используя htmlspecialchars() .
  • 0
    Возможный дубликат stackoverflow.com/questions/3418376/…
Показать ещё 2 комментария
Теги:

2 ответа

0
Лучший ответ

Ну, вы можете просто использовать обычную конкатенацию строк для записи xml файла (в качестве альтернативы вы могли бы потратить время на выполнение сложного пути с объектом xml, что некоторые могут считать более правильным).

Затем вы открываете файл с fopen() в режиме записи. если файл не существует, он будет создан. убедитесь, что у вас есть разрешение на запись в этот каталог, или файл не будет записан (и если отчет об ошибках будет строгим, будет вызвана фатальная ошибка, иначе просто предупреждение). во-вторых, вы используете fwrite() для записи в файл. Для получения дополнительной информации прочитайте руководство по функциям файловой системы

$file = '/path/to/mynewxmlfile.xml';
$data = 
'
<?xml version="1.0"?>
<channel>
<title>'.$channel_title.'</title>
<link>'.$channel_link.'</link>
<managingEditor>'.'$managingEditor.</managingEditor>
<channel_description>'.$channel_description.'</channel_description>
';

for($i = 0; $i < 7; $i++){

    $pubDate = $xml->channel->item[$i]->pubDate;
    $title = $xml->channel->item[$i]->title;
    $link = $xml->channel->item[$i]->link;
    $guid = $xml->channel->item[$i]->guid;
    $author = $xml->channel->item[$i]->author;
    $description = $xml->channel->item[$i]->description;
    $url0 = $xml->channel->item[$i]->enclosure->attributes()->url;

    for($ii = 0; $ii < 2; $ii++){
        $url = $xml->channel->item[$i]->enclosure[$ii]->attributes()->url;
    }
    $data .=
    '
    <item>
    <title>'.$title.'</title>
    <guid>'.$guid.'</guid>
    <author>'.$author.'</author>
    <description>'.$description.'</description>
    <enclosure0>'.$url0.'</enclosure0>
    <enclosure1>'.$url.'</enclosure1>
    </item>
    ';

}
$data .= '</channel>';

fwrite(fopen($file,'w'),$data);

Кроме того, вы можете использовать simplexml_load_string() для загрузки строки в виде xml, а затем использовать asXml() для записи на диск, например:

$data = simplexml_load_string($data);
$data->asXml($file);
  • 1
    спасибо, братан, ты человек!, это работает! .. Мне просто все еще нужно выяснить, как расшифровать: "& eacute;" (HTML-сущности, которым я верю). любая идея ?
1

Прочтите документы http://php.net/manual/en/simplexmlelement.asxml.php

$xml->asXml('rss.xml');

редактировать

и если вы хотите создать новый xml, есть ответ qaru.site/questions/82054/...

  • 1
    Ссылка из документации: «имя файла Если указано, функция записывает данные в файл, а не возвращает их». Ссылка из поста пользователя: "Теперь, как я могу сохранить XML?" Где я не прав?
  • 0
    Эй, ребята, я обновил вопрос, добавив больше кода, пытаясь прояснить свой вопрос и то, что я пытаюсь сделать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню