【问题标题】:echo simplexml object回显 simplexml 对象
【发布时间】:2012-06-15 21:49:57
【问题描述】:

这个问题有两个部分。

第 1 部分。 昨天我有一些代码可以从 RSS 提要中回显 XML 的全部内容。然后我从我的 php 文档中删除它,保存它,我完全在踢自己。

我相信语法是这样的:

$xml = simplexml_load_file($url);
echo $xml;

我又试了一次,但它不起作用,所以显然我忘记了正确的语法,可以使用你的帮助,亲爱的 stackoverflow 问答者。

我一直试图弄清楚我在做什么,但我无法在 Google 或 PHP 网站上找到示例。我试过 print_r($url);命令,它给了我似乎是一个原子化版本的提要。我想要整个字符串,疣和所有。我意识到我可以在窗口中输入 RSS 链接并查看它,但在我编码和点头时将它放在我的 PHP 页面上会很有帮助。

第 2 部分 我想重建它的主要原因是因为我试图从博客 RSS 中解析节点,以便将其显示在托管在私有域上的网页上。我发布了一个虚拟博客,并在未能为其中一个虚拟帖子添加标题时发现了一个尴尬的格式错误。

那么在这种情况下人们会怎么做呢?我试了一下:

if(entry->title == "")
{$entryTitle = "untitled";}

这根本不起作用。

这是我处理博客的整个 php 脚本:

<?php
/*create variables*/
$subtitle ="";
$entryTitle="";
$html = "";
$pubDate ="";
/*Store RSS feed address in new variable*/
$url = "http://www.blogger.com/feeds/6552111825067891333/posts/default";
/*Retrieve BLOG XML and store it in PHP object*/
$xml = simplexml_load_file($url);
print_r($xml);
/*Parse blog subtitle into HTML and echo it on the page*/
$subtitle .= "<h2 class='blog'>" . $xml->subtitle . "</h2><br />";
echo $subtitle;
/*Go through all the entries and parse them into HTML*/
foreach($xml->entry as $entry){
/*retrieve publication date*/
    $xmlDate = $entry->published;
    /*Convert XML timestamp into PHP timestamp*/
    $phpDate = new DateTime(substr($xmlDate,0,19));
    /*Format PHP timestamp to something humans understand*/
    $pubDate .= $phpDate->format('l\, F j\, Y h:i A');
    if ($entry->title == "")
    {
        $entryTitle .= "Untitled";
    }
        echo $entry->title;
    /*Pick through each entry and parse each XML tree node into an HTML ready blog post*/
        $html .= "<h3 class='blog'>".$entry->title . "<span class='pubDate'> | " .$pubDate . "</span></h3><p class='blog'>" . $entry->content . "</p>";
    /*Print the HTML to the web page*/  
        echo $html;
    /*Set the variables back to empty strings so they do not repeat data upon reiteration*/
        $html = "";
        $pubDate = "";
}
?>

【问题讨论】:

    标签: php html rss simplexml blogger


    【解决方案1】:

    根据php手册:

    $xml = new SimpleXMLElement($string);
    .
    .
    .
    

    那么如果你想echo结果:

    echo $xml->asXML();
    

    或将 xml 保存到文件中:

    $xml->asXML('blog.xml'); 
    

    参考文献

    【讨论】:

      【解决方案2】:

      第 1 部分

      这仍然不是我想要的,而是一种非常整洁有序的回显 xml 数据的方式:

          $url = "http://www.blogger.com/feeds/6552111825067891333/posts/default";
      $xml = simplexml_load_file($url);
      echo '<pre>';
      print_r($xml);
      

      第 2 部分

      我必须让 firephp 运行,这样我才能准确地看到当它到达一个没有博客标题的条目时 php 遇到了什么元素。最终它是一个空数组。因此,简单:

      if(empty($entry->title))
      

      完美运行。对于字符串比较,我发现您可以简单地将其转换为字符串。对我而言,这是不必要的。

      【讨论】:

        【解决方案3】:

        simplexml_load_file 返回一个 SimpleXMLElement,所以:

        print_r($xml);
        

        将显示其次要对象数组

        调整后,您可以调用 $xml->asXML("filename.xml"); 正如@Tim Withers 指出的那样。

        【讨论】:

          【解决方案4】:

          第 1 部分:echo $xml-&gt;asXML(); - http://www.php.net/manual/en/simplexmlelement.asxml.php

          第 2 部分:php SimpleXML check if a child exists

          $html .= "<h3 class='blog'>".($entry->title!=null?$entry->title:'No Title')
              . "<span class='pubDate'> | " .$pubDate . "</span></h3><p class='blog'>" 
              . $entry->content . "</p>";
          

          注意我可能会像这样加载网址:

          $feedUrl = 'http://www.blogger.com/feeds/6552111825067891333/posts/default';
          $rawFeed = file_get_contents($feedUrl);
          $xml = new SimpleXmlElement($rawFeed);
          

          根据您对第 1 部分的评论,我不确定 XML 是否已完全加载。如果您尝试以这种方式加载它,它应该显示所有 XML 数据。

          【讨论】:

          • 第 1 部分:我尝试了 asXML 命令,但它仍然为我提供了 xml 的精简版本。第 2 部分:根据答案,我应该检查它是否为空。我倾向于然后推断我可以用字符串填充那个潜在的空元素。你同意吗?如果是这样,你能告诉我使用哪个函数吗?
          • 谢谢蒂姆。现在如何在页面上打印未删节的 xml?检查差异;这是虚拟博客页面:cobracabanarecords.com/index2.php。 RSS 提要在这里:blogger.com/feeds/6552111825067891333/posts/default
          • 实际上,您上次的编辑并没有像我想象的那样解决问题。我添加了这个:$feedUrl = "blogger.com/feeds/6552111825067891333/posts/… = file_get_contents($feedUrl);$xml = newSimpleXMLElement($rawFeed); 然后我尝试了 print_f、echo 和 echo $xml->asXML(尝试了各种变量)。我还在获取 XML 的简短版本。
          • 您为第 2 部分提供的语法也不起作用。感谢您的宝贵时间。
          猜你喜欢
          • 1970-01-01
          • 2011-08-12
          • 2013-06-10
          • 1970-01-01
          • 1970-01-01
          • 2012-11-21
          • 2013-11-08
          • 2011-05-18
          相关资源
          最近更新 更多