PDA

View Full Version : خروجی گرفتن از اطلاعات جدول rss



makhmakhy
جمعه 21 شهریور 1393, 08:39 صبح
سلام
من با تابع زیر میخوام محتوای یک جدول که در داخل یک آر اس اس وجود داره رو ذخیره کنم

simplexml_load_file()
محتوای آر اس اس هم اینطوره:

<item>
<title>name</title>
<link>link.com</link>
<description>
<table cellspacing="0" cellpadding="0" border="0" width="100%" style="border:1px solid #bebcb7; background:#f8f7f5;">
<tr>
<th align="left" bgcolor="#d9e5ee" style="padding:3px 9px">ITEM</th>
<th align="center" bgcolor="#d9e5ee" style="padding:3px 9px">QTY</th>
<th align="right" bgcolor="#d9e5ee" width="10%" style="padding:3px 9px">Total</th>
</tr>
</table>
</description>
</item>

من میخوام محتوای جدول رو جداگونه نمایش بدم ولی هرکار میکنم نمیشه :-/
یعنی همه ITEM ها رو در یک ستون ذخیره کنم
همهQTY ها رو در ستون دیگر
ممنون میشم که کمک کنید

mohammad reza beizavi
جمعه 21 شهریور 1393, 09:02 صبح
درود
بدنه فایلتون (sipmple_load_file) رو ندیدم، اما فکر کنم این به دردتون بخوره، فقط بعد از گرفتن elementها یا همزمان با اینکار می تونید اطلاعات رو ذخیره کنید:


<?php
$xmlDoc = new DOMDocument();
$xmlDoc->load("http://news.google.com/news?ned=us&topic=h&output=rss");
//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;
?>

makhmakhy
جمعه 21 شهریور 1393, 09:12 صبح
[QUOTE=mohammad reza beizavi;2100916]درود
بدنه فایلتون (sipmple_load_file) رو ندیدم، اما فکر کنم این به دردتون بخوره، فقط بعد از گرفتن elementها یا همزمان با اینکار می تونید اطلاعات رو ذخیره کنید:

چون در ابتدای کار میخواستم محتوا رو نمایش بدم و در صورت صحت عملکرد، اونها رو دخیره کنم، از کد ساده زیر استفاده کردم:

require('simple_html_dom.php');
$html = simplexml_load_file('link.com');

echo '<li>' . $html->channel->item->title . '</li>';
echo '<li>' . $html->channel->item->description . '</li>';

مشکل کدی که من استقاده کردم اینه که همه محتوای تگ description رو یک جا نمایش میده و من نمیتونم مقادیر اون رو جداگونه ذخیره کنم

mohammad reza beizavi
جمعه 21 شهریور 1393, 09:23 صبح
بسیار خوب
کافیه کد ارسالی رو به همین نام ذخیره کنید و البته متغیر $channel رو return کنید و تا بتونید از خروجیش استفاده کنید، بعد از همین کد خودتون استفاده کنید.
راستی برای اینکه بتونید لینک رو به همین فایل پاس بدید و ازش استفاده کنید کد رو اینجور تغییر بدید:



<?php
$xml=$argv[1];


$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);


//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;


return $channel;
?>

makhmakhy
جمعه 21 شهریور 1393, 09:28 صبح
بسیار خوب
کافیه کد ارسالی رو به همین نام ذخیره کنید و البته متغیر $channel رو return کنید و تا بتونید از خروجیش استفاده کنید، بعد از همین کد خودتون استفاده کنید.
راستی برای اینکه بتونید لینک رو به همین فایل پاس بدید و ازش استفاده کنید کد رو اینجور تغییر بدید:



<?php
$xml=$argv[1];


$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);


//get elements from "<channel>"
$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;


return $channel;
?>


اگه یه کم واضح تر توضیح بدید ممنون میشم :)

mohammad reza beizavi
جمعه 21 شهریور 1393, 09:44 صبح
توجه کنید، شما با این کد یه تکه برنامه دارید که می تونه مسیر rss رو بگیره، بعد تمام element های داخل اون رو load کنه داخل آرایه دو بعدی channel حاوی سه ستون channel_title و channel_link و channel_desc.
حالا این آرایه رو return می کنی. داخل هر متغیری که می خوای میریزیش مثلا همون $html که توی کدت هست.
البته شما بهتره از یک function به جای یه فایل جداگانه استفاده کنید مثل این:



<?php
function simplexml_load_file($xml)
{
$xmlDoc = new DOMDocument();
$xmlDoc->load($xml);


$channel=$xmlDoc->getElementsByTagName('channel')->item(0);
$channel_title = $channel->getElementsByTagName('title')->item(0)->childNodes->item(0)->nodeValue;
$channel_link = $channel->getElementsByTagName('link')->item(0)->childNodes->item(0)->nodeValue;
$channel_desc = $channel->getElementsByTagName('description')->item(0)->childNodes->item(0)->nodeValue;


return $channel;
}


$html = simplexml_load_file('link.com');
foreach($html as $rss)
{
echo '<li>' . $rss['channel_title'] . '</li>';
echo '<li>' . $rss['channel_desc'] . '</li>';
}
?>