Jump to content
  • 0

Передать данные из PHP в XML - возможно ли?


novickOk
 Share

Question

12 answers to this question

Recommended Posts

  • 0

Воспользовался SimpleXML и получил такой код

<? header("Content-Type: text/xml; charset=utf-8");?>
<?php include ("blocks/bd.php");?>
<?php $result29 = mysql_query("SELECT title FROM data LIMIT 1",$db);

if (!$result29)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору admin@ruseller.com. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result29) > 0)

{
$myrow29 = mysql_fetch_array($result29);}

do
{
$xmlstr = <<<XML
<rss version='2.0'>
<channel>
<title>Имя</title>
<link>http://www.моя_лента.ru</link>
<description>Самый лучший блог на свете</description>
<lastBuildDate>Sat, 30 Dec 2006 00:00:00 +0300</lastBuildDate>
<item>
<title>С Новым Годом!</title>
<link>http://www.моя_лента.ru/new1.html</link>
<description>Поздравляем всех читателей с Новым Годом</description>
</item>
</channel>
</rss>
XML;

}
while ($myrow29 = mysql_fetch_array($result29));
?>
<?php echo $xmlstr; ?>

, но когда я пытаюсь поставить что-то вроде

echo $myrow["title"];

он выводит только echo; содержимое же переменной нет.

Что я делаю не так, подскажите, пожалуйста.

Link to comment
Share on other sites

  • 0

$myrow29["title"]

?

Где тут SimpleXML, не догоняю.

Ок, вопрос неправильно сформулировал. Вот новый: почему в SimpleXML (

<?php
$xmlstr = <<<XML
<?xml version='1.0' standalone='yes'?>
<title>Бла-Бла-бла</title>
XML;?>

) если подставить вместо "Бла-Бла-бла" переменную $example не отображается ее содержимое, объявленное до этого в этом же документе?

Link to comment
Share on other sites

  • 0

я обычно динамически создаю xml в php, для этого использую свои функции, писать здесь смысла не вижу, но что мешает создавать вам подобным способом свою xml, как я вижу вы делаете что-то подобное


<?php $result29 = mysql_query("SELECT title FROM data LIMIT 1",$db);

if (!$result29)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору admin@ruseller.com. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result29) > 0)

{
$myrow29 = mysql_fetch_array($result29);}

do
{
$xmlstr = <<<XML
<rss version='2.0'>
<channel>
<title>Имя</title>
<link>http://www.моя_лента.ru</link>
<description>Самый лучший блог на свете</description>
<lastBuildDate>Sat, 30 Dec 2006 00:00:00 +0300</lastBuildDate>
<item>
<title>С Новым Годом!</title>
<link>http://www.моя_лента.ru/new1.html</link>
<description>Поздравляем всех читателей с Новым Годом</description>
</item>
</channel>
</rss>
XML;

}
while ($myrow29 = mysql_fetch_array($result29));
echo $xmlstr; ?>

ща пойдут советы, но ваше дело следовать им или нет:

1. для начала думаю стоит строку взять в кавычки.

2. предположим у вас в базе хранятся ваши новости колонки наверно такие: title,link,description,date - это то, что в xml находится в item и lastBuildDate, другие title,link,description это наверно относится к вашему сайту и эти данные берутся из другого источника или вообще вписаны жостко.

3. запрос к базе реализован нормально, но цикл с предусловием думаю будет лучше смотреться, чем ваш с постусловием, а еще лучше сделать это без цикла т.к. ваш запрос просит всего лишь одну строку. И проверка на это if(!$result29) нужно только в том случае, если ошибка в запросе происходит, но я думаю лучше избежать подобных моментов, да и ваш запрос не динамический, чтобы в нем произошла какая-то ошибка, только если будет утеряна связь с базой, а там ошибка появится еще до этой строки.

теперь предлагаемый мой вариант кода:


<?php
$result29 = mysql_query("SELECT `title`,`link`,`description`,`date` FROM `data` LIMIT 1",$db);
if(mysql_num_rows($result29) > 0)
{
while ($myrow29 = mysql_fetch_array($result29));
{
$xmlstr = "
<XML>
<rss version='2.0'>
<channel>
<title>Имя</title>
<link>http://www.моя_лента.ru</link>
<description>Самый лучший блог на свете</description>
<lastBuildDate>". $myrow29['date'] ."</lastBuildDate>
<item>
<title>". $myrow29['title'] ."</title>
<link>". $myrow29['link'] ."</link>
<description>". $myrow29['description'] ."</description>
</item>
</channel>
</rss>
</XML>";
}
echo $xmlstr;
?>

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


$xmlstr = "
<XML>
<rss version='2.0'>
<channel>
<title>Имя</title>
<link>http://www.моя_лента.ru</link>
<description>Самый лучший блог на свете</description>
<lastBuildDate>%s</lastBuildDate>
<item>
<title>%s</title>
<link>%s</link>
<description>%s</description>
</item>
</channel>
</rss>
</XML>";
printf($xmlstr,$myrow29['date'],$myrow29['title'],$myrow29['link'],$myrow29['description'])

Link to comment
Share on other sites

  • 0

Switch74, я считаю, если есть инструмент, то надо его использовать. Конечно можно и руками собирать xml, но если пара-другая строчек.

И в любом случае стоит овладеть имеющимися в языке возможностями.

А я вот снова не вижу, где используется simpleXML

Кстати, я предпочитаю xmlWriter, а то у симпла какие-то проблемы разок были с UTF-8

Во втором примере отсутствует echo.

Int, а что за косяк с UTF-8, можно подробней? Ни разу не встречал.

Link to comment
Share on other sites

  • 0

ну на вкус и цвет товарищей нет, мне просто не очень нравится структура возвращаемая данными стандартными обработчиками xml, я сделал ту, что устраивает меня, возможно не самый лучший вариант, но удобный для меня. Я уже давно привык мириться с некоторыми ограничениями:

хочешь быстрый код жертвуй объемом информации

хочешь экономить на месте будет потеря в скорости

и т.п.

если учесть, что на виртуальных хостингах еще и ограничивают системные ресурсы, то нужно еще и это учитывать

Link to comment
Share on other sites

  • 0

Во втором примере отсутствует echo.

Если поставить echo. то будет выводится только оно, то есть на сайте вместо того, чтобы вывести содержимое ячейки на сайте просто отображается само echo

я обычно динамически создаю xml в php, для этого использую свои функции, писать здесь смысла не вижу, но что мешает создавать вам подобным способом свою xml, как я вижу вы делаете что-то подобное


<?php $result29 = mysql_query("SELECT title FROM data LIMIT 1",$db);

if (!$result29)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору admin@ruseller.com. <br> <strong>Код ошибки:</strong></p>";
exit(mysql_error());
}
if (mysql_num_rows($result29) > 0)

{
$myrow29 = mysql_fetch_array($result29);}

do
{
$xmlstr = <<<XML
<rss version='2.0'>
<channel>
<title>Имя</title>
<link>http://www.моя_лента.ru</link>
<description>Самый лучший блог на свете</description>
<lastBuildDate>Sat, 30 Dec 2006 00:00:00 +0300</lastBuildDate>
<item>
<title>С Новым Годом!</title>
<link>http://www.моя_лента.ru/new1.html</link>
<description>Поздравляем всех читателей с Новым Годом</description>
</item>
</channel>
</rss>
XML;

}
while ($myrow29 = mysql_fetch_array($result29));
echo $xmlstr; ?>

ща пойдут советы, но ваше дело следовать им или нет:

1. для начала думаю стоит строку взять в кавычки.

2. предположим у вас в базе хранятся ваши новости колонки наверно такие: title,link,description,date - это то, что в xml находится в item и lastBuildDate, другие title,link,description это наверно относится к вашему сайту и эти данные берутся из другого источника или вообще вписаны жостко.

3. запрос к базе реализован нормально, но цикл с предусловием думаю будет лучше смотреться, чем ваш с постусловием, а еще лучше сделать это без цикла т.к. ваш запрос просит всего лишь одну строку. И проверка на это if(!$result29) нужно только в том случае, если ошибка в запросе происходит, но я думаю лучше избежать подобных моментов, да и ваш запрос не динамический, чтобы в нем произошла какая-то ошибка, только если будет утеряна связь с базой, а там ошибка появится еще до этой строки.

теперь предлагаемый мой вариант кода:


<?php
$result29 = mysql_query("SELECT `title`,`link`,`description`,`date` FROM `data` LIMIT 1",$db);
if(mysql_num_rows($result29) > 0)
{
while ($myrow29 = mysql_fetch_array($result29));
{
$xmlstr = "
<XML>
<rss version='2.0'>
<channel>
<title>Имя</title>
<link>http://www.моя_лента.ru</link>
<description>Самый лучший блог на свете</description>
<lastBuildDate>". $myrow29['date'] ."</lastBuildDate>
<item>
<title>". $myrow29['title'] ."</title>
<link>". $myrow29['link'] ."</link>
<description>". $myrow29['description'] ."</description>
</item>
</channel>
</rss>
</XML>";
}
echo $xmlstr;
?>

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


$xmlstr = "
<XML>
<rss version='2.0'>
<channel>
<title>Имя</title>
<link>http://www.моя_лента.ru</link>
<description>Самый лучший блог на свете</description>
<lastBuildDate>%s</lastBuildDate>
<item>
<title>%s</title>
<link>%s</link>
<description>%s</description>
</item>
</channel>
</rss>
</XML>";
printf($xmlstr,$myrow29['date'],$myrow29['title'],$myrow29['link'],$myrow29['description'])

Спасибо за то, что уделили мне время, на выходных обязательно попробую ваш код, сейчас завал :)

Edited by novickOk
Link to comment
Share on other sites

  • 0

ну на вкус и цвет товарищей нет, мне просто не очень нравится структура возвращаемая данными стандартными обработчиками xml, я сделал ту, что устраивает меня, возможно не самый лучший вариант, но удобный для меня. Я уже давно привык мириться с некоторыми ограничениями:

хочешь быстрый код жертвуй объемом информации

хочешь экономить на месте будет потеря в скорости

и т.п.

если учесть, что на виртуальных хостингах еще и ограничивают системные ресурсы, то нужно еще и это учитывать

ну, тут экономия на спичках, имхо, и то вряд ли. по скорости не замечал тормозов на системах которые полностью построены на стандартных xml-функциях и xsl-шаблонизации, в сравнении с костылями для xml, или шаблонах на <? if ($some) {echo $var;}?>. к тому же они включены по умолчанию, а значит от них отказываться, всё равно что переписывать функции вроде mysql_query() и т.п. Быстрее велосипед поедет вряд ли, а время будет потрачено. Да и хостинг современный достаточно мощный. Как правило его грузит, кроме мега-объёмов обрабатываемых данных, это трафик+плохо настроенная/обвешенная свистелками cms. А в этом случае значит всего лишь, что проект перерос шаред))

Гуру php и администрирования серверов, поправьте меня, если заблуждаюсь! :unsure:

Edited by Быколай
Link to comment
Share on other sites

  • 0
Int, а что за косяк с UTF-8, можно подробней? Ни разу не встречал.
Да что-то не хотело оно текст в utf-8 у меня выводить. Если я хорошо помню.

Если структура xml состоит из повторяющихся блоков, я делаю так:

$a='<a>[a]</a>
<b>[b]</b>
<c>[c]</c>';
$xml='';
$aa='aa';
$bb='bb';
$cc='cc';

$rep=array('[a]'=>$aa, '[b]'=>$bb, '[c]'=>$cc);
$xml.=strtr($a,$rep);

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy