3

この質問には2つの部分があります。

パート1。昨日、RSSフィードからXMLのコンテンツ全体をエコーするコードがありました。それから私はそれを私のphpドキュメントから削除し、それを保存しました、そして私は完全に自分自身を蹴っています。

構文は次のようになっていると思います。

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

私はそれをもう一度試しましたが、それは機能していません、それでどうやら私は正しい構文を忘れて、あなたの助けを使うことができました、親愛なるstackoverflow質問回答者。

私は自分が何をしていたかを理解しようとし続けていますが、GoogleやPHPサイトで例を見つけることができません。print_r($ url);を試しました。コマンドを実行すると、フィードのアトマイズされたバージョンのように見えます。弦全体、いぼ、そしてすべてが欲しいです。RSSリンクをウィンドウに入力して表示するだけでよいことに気付きましたが、コーディングとうなずきをしているときに、PHPページにRSSリンクを表示しておくと役に立ちました。

パート2これを再構築したかった主な理由は、プライベートドメインでホストされているWebページに表示するためにブログRSSからノードを解析しようとしているためです。ダミーのブログを投稿しましたが、ダミーの投稿の1つにタイトルを追加できなかったときに、フォーマットの不具合を発見しました。

では、この状況で何をするのでしょうか?私は少し試しました:

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 = "";
}
?>
4

4 に答える 4

12

phpマニュアルによると:

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

次にecho、結果が必要な場合:

echo $xml->asXML();

または、xmlをファイルに保存します。

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

参考文献

于 2013-12-22T11:48:32.827 に答える
2

パート1

これはまだ私が望んでいたものではありませんが、xmlデータをエコーするための非常に整然とした整理された方法です。

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

パート2

ブログのタイトルのないエントリに到達したときにphpが遭遇した要素を正確に確認できるように、firephpを実行する必要がありました。最終的には空の配列です。したがって、単純です。

if(empty($entry->title))

完璧に動作します。文字列を比較するために、単純に文字列としてキャストできることがわかりました。私の目的では、それは不要でした。

于 2012-06-13T17:06:48.213 に答える
1

SimpleXMLElementsimplexml_load_fileを返すので、次のようになります。

print_r($xml);

マイナーオブジェクト配列が表示されます。

微調整後、 $ xml-> asXML( "filename.xml");を呼び出すことができます。@TimWithersが指摘したように。

于 2012-06-12T23:52:51.863 に答える
0

パート1:echo $xml->asXML();-http : //www.php.net/manual/en/simplexmlelement.asxml.php

パート2:phpSimpleXMLは子が存在するかどうかをチェックします

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

おそらく次のようにURLをロードすることに注意してください。

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

パート1に関するあなたのコメントに基づいて、XMLが完全にロードされているかどうかはわかりません。この方法でロードしようとすると、すべてのXMLデータが表示されます。

于 2012-06-12T23:52:08.900 に答える