在PHP解析XML

问题描述:

我解析一个XML,但有一个标签,其中包含图像和文字两个,我想在表格的不同列中分离图像和文本在我的设计布局,但我不知道该怎么做。请帮帮我。我的PHP文件是:在PHP解析XML

<?php 
$RSS_Content = array(); 

function RSS_Tags($item, $type) 
{ 
    $y = array(); 
    $tnl = $item->getElementsByTagName("title"); 
    $tnl = $tnl->item(0); 
    $title = $tnl->firstChild->textContent; 

    $tnl = $item->getElementsByTagName("link"); 
    $tnl = $tnl->item(0); 
    $link = $tnl->firstChild->textContent; 
    $tnl = $item->getElementsByTagName("description"); 
    $tnl = $tnl->item(0); 
    $img = $tnl->firstChild->textContent; 

    $y["title"] = $title; 
    $y["link"] = $link; 
    $y["description"] = $img; 
    $y["type"] = $type; 

    return $y; 
} 

function RSS_Channel($channel) 
{ 
    global $RSS_Content; 

    $items = $channel->getElementsByTagName("item"); 

    // Processing channel 

    $y = RSS_Tags($channel, 0);  // get description of channel, type 0 
    array_push($RSS_Content, $y); 

    // Processing articles 

    foreach($items as $item) 
    { 
     $y = RSS_Tags($item, 1); // get description of article, type 1 
     array_push($RSS_Content, $y); 
    } 
} 

function RSS_Retrieve($url) 
{ 
    global $RSS_Content; 

    $doc = new DOMDocument(); 
    $doc->load($url); 

    $channels = $doc->getElementsByTagName("channel"); 

    $RSS_Content = array(); 

    foreach($channels as $channel) 
    { 
     RSS_Channel($channel); 
    } 

} 

function RSS_RetrieveLinks($url) 
{ 
    global $RSS_Content; 

    $doc = new DOMDocument(); 
    $doc->load($url); 

    $channels = $doc->getElementsByTagName("channel"); 

    $RSS_Content = array(); 

    foreach($channels as $channel) 
    { 
     $items = $channel->getElementsByTagName("item"); 
     foreach($items as $item) 
     { 
      $y = RSS_Tags($item, 1); 
      array_push($RSS_Content, $y); 
     } 
    } 

} 

function RSS_Links($url, $size = 15) 
{ 
    global $RSS_Content; 

    $page = "<ul>"; 

    RSS_RetrieveLinks($url); 
    if($size > 0) 
    $recents = array_slice($RSS_Content, 0, $size + 1); 

    foreach($recents as $article) 
    { 
     $type = $article["type"]; 
     if($type == 0) continue; 
     $title = $article["title"]; 
     $link = $article["link"]; 
     $img = $article["description"]; 
     $page .= "<a href=\"#\">$title</a>\n"; 
    } 

    $page .="</ul>\n"; 

    return $page; 

} 

function RSS_Display($url, $click, $size = 8, $site = 0, $withdate = 0) 
{ 
    global $RSS_Content; 

    $opened = false; 
    $page = ""; 
    $site = (intval($site) == 0) ? 1 : 0; 

    RSS_Retrieve($url); 
    if($size > 0) 
    $recents = array_slice($RSS_Content, $site, $size + 1 - $site); 

    foreach($recents as $article) 
    { 
     $type = $article["type"]; 
     if($type == 0) 
     { 
      if($opened == true) 
      { 
       $page .="</ul>\n"; 
       $opened = false; 
      } 
      $page .="<b>"; 
     } 
     else 
     { 
      if($opened == false) 
      { 
       $page .= "<table width='369' border='0'> 
      <tr>"; 
       $opened = true; 
      } 
     } 
     $title = $article["title"]; 
     $link = $article["link"]; 
     $img = $article["description"]; 
     $page .= "<td width='125' align='center' valign='middle'> 
       <div align='center'>$img</div></td>      
     <td width='228' align='left' valign='middle'><div align='left'><a 
        href=\"$click\" target='_top'>$title</a></div></td>"; 
     if($withdate) 
     { 
      $date = $article["date"]; 
      $page .=' <span class="rssdate">'.$date.'</span>'; 
     } 
      if($type==0) 
      { 
       $page .="<br />"; 
      } 
     } 

     if($opened == true) 
     { 
      $page .="</tr> 
       </table>"; 
     } 
     return $page."\n"; 

    } 
?> 
+2

你已经尝试过什么,它在哪里破裂?并向我们​​展示您的XML。 –

+0

http://ibnlive.in.com/ibnrss/top.xml这是我的xml – user2130861

+0

,我想打破$ img = $ article [“description”];这个标签 – user2130861

要你需要分析存储在里面的描述再次元素作为XML的HTML的图像和描述分开。幸运的是,它在该元素内部是有效的XML,因此您可以直接使用SimpleXML,以下代码示例采用URL并将每个项目 * description *转换为仅文本并提取src属性图像以将其存储为图像元件

<item> 
    <title>Fake encounter: BJP backs Kataria, says CBI targeting Modi</title> 
    <link>http://ibnlive.in.com/news/fake-encounter-bjp-backs-kataria-says-cbi-targeting-modi/391802-37-64.html</link> 
    <description>The BJP lashed out at the CBI and questioned its 'shoddy investigation' into the Sohrabuddin fake encounter case.</description> 
    <pubDate>Wed, 15 May 2013 13:48:56 +0530</pubDate> 
    <guid>http://ibnlive.in.com/news/fake-encounter-bjp-backs-kataria-says-cbi-targeting-modi/391802-37-64.html</guid> 
    <image>http://static.ibnlive.in.com/ibnlive/pix/sitepix/05_2013/bjplive_kataria3.jpg</image> 
</item> 

的代码的例子是:

$url = 'http://ibnlive.in.com/ibnrss/top.xml'; 
$feed = simplexml_load_file($url); 

$items = $feed->xpath('(//channel/item)'); 

foreach ($items as $item) { 
    list($description, $image) = 
     simplexml_load_string("<r>$item->description</r>") 
      ->xpath('(/r|/r//@src)'); 
    $item->description = (string)$description; 
    $item->image  = (string)$image; 
} 

然后可以导入的SimpleXML一个DOMElement与然而dom_import_simplexml()说实话,我只是想包那个小HTML创建以及进入的SimpleXML的一个foreach,因为你可以利用LimitIterator的寻呼以及你可能DOM文档和您访问的数据实际上很容易与SimpleXML一起传递,只需简单地将XML元素传递为SimpleXMLElements,而不是首先解析为数组,然后再处理数组。这是没有意义的。