эй, ребята, я пытаюсь разобрать 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>
Ну, вы можете просто использовать обычную конкатенацию строк для записи 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);
Прочтите документы http://php.net/manual/en/simplexmlelement.asxml.php
$xml->asXml('rss.xml');
редактировать
и если вы хотите создать новый xml, есть ответ qaru.site/questions/82054/...
htmlspecialchars()
.