schleifen und simplexml_load_string um rss feed zu bauen

supersalzi

Erfahrenes Mitglied
Hi,

folgendes: Ich erzeuge mittles simplexml_load_string ein Objekt einer xml Datei.

Damit kann ich auf die einzelnen Elemente und Attribute zugreifen. Diese Werte möchte ich nun zu einem rss Feed zusammenfügen.
Das Problem: Der xml datensatz wiederholt sich immer wieder. Jetzt brauch ein eine Schleife, welche die Inhalte eines jeden xml Datensatzes einzelnaus ausgibt. Da das Objekt aber ein Objekt und kein Array ist scheitere ich daran.

Weiss jeamand wie man sowas machen kann?
xml File:
HTML:
<div id="news">
<h2>Überschrift <span>| 05.06.2006</span></h2>
<p>Newstext</p>

<h2>Ueberschrift 2<span>| 14.04.2006</span></h2>
<p>Newstext 2</p>

PHP:
while(? = ?){
	 
$i=0;

$xml_h2 = utf8_decode($xml->h2[$i]);
$xml_p = utf8_decode($xml->p[$i]);

  
 echo"
	 <item>
      <title>$xml_h2</title>
      <description><![CDATA[$xml_p]]></description>
	  <link></link>
      <author></author>
    </item>";
	
$i++;

}

keine Ahnung ob eine while Schleife gut ist.

Vielen Dank,
Salzi
 
Löst das Dein Problem?

PHP:
<?php

    $rss = '';
    for($i=0;$i < count($xml->h2);$i++){
    
    $rss.='<item>
    <title>'.utf8_decode($xml->h2[$i]).'</title>
    <description><![CDATA['.utf8_decode($xml->p[$i]).']]></description>
    <link></link>
    <author></author>
    </item>';
    }
    
    $ausgabe = htmlspecialchars($rss);
    echo nl2br($ausgabe);
   
 ?
 
Hi,

nein, ich glaube deine Lösung geht nicht, da count() nicht funktioniert (da objekt oder so).

Ich habe es so, bekomme aber leider noch eine fehlermeldung die ich nicht wegbekomme.

PHP:
<?php
   
   $filename = 'html_news.xml';
    
   function htmlentities_decode( $string ){
      $trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
      $trans = array_flip($trans);
      return strtr($string, $trans);
   }

   if(file_exists($filename)) {

		$xml = simplexml_load_string(htmlentities_decode(file_get_contents($filename)));//Lädt die XML-Datei in ein Objekt
	   
	    if($xml) {    //Prüfen, ob Datei Fehler enthielt
		}else{
			echo '<p>Die Datei names '. $filename .' konnte nicht geöffnet werden</p>';
		}
	}
	

$i=0;

while(!empty($xml->h2[$i])) {



	foreach($xml->p[$i]->a->attributes() as $a => $b) {     // Line 28, Fehlerquelle
	  // echo $a,'="',$b,"\"\n";
		if($a == "href"){
	 		$xml_a_href = $b;
		}elseif($a == ""){
			$xml_a_href = "";
		}
	} 


	$xml_h2 = utf8_decode($xml->h2[$i]);
	$xml_p = utf8_decode($xml->p[$i]);
	
	$rss .="
		   
<item>
<title>$xml_h2</title>
<description><![CDATA[$xml_p]]></description>
<link>$xml_a_href </link>
<author>Salzi</author>
</item>";


$i++;
}
echo $rss;

xml:
HTML:
<?xml version="1.0" encoding="ISO-8859-1"?>

<div id="news">
<h2>Überschrift <span>| 05.06.2006</span></h2>
<p>Texttext <a class="a3" href="url">link</a>.</p>

<h2>Gästebuch <span>| 14.04.2006</span></h2>
<p>Das Gästebuch ist schön.<a href="url2">link</a></p>

<h2>Medb</h2>
<p>Das lässt sich evt. mir drastisch zugespitztem Selbstzweck erklären;
Dinge die ich mir irgendwo aufschreiben könnte landen hier, das spart Papier.
Im idealfall existiert der Datensatz parallel dazu in meinem Kopf, das hier könnte man als Stufe des Lernprozesses bezeichnen.
<a href="url3">link</a> </p>

<h2>Blog</h2>
<p>do it yourself! So habe ich mir jetzt mein eigenes Blog gebaut. Vorher hatte ich so ein fertig CGI Scipt umgebaut,
was aber nicht so optimal war, da ich dazu u.a. den  style des Adminbereich des Hosters verschandelt hatte.
Es ist nun kein mobile weblog mehr, das heißt kein MMS und email posting, aber wer braucht solch Zeug?</p>

<h2>Accessibility</h2>
<p>Salzinet verhält sich flexibler denn je zuvor.<br />
Mehr dazu findest du in den <a href="?a=faq" class="a3">FAQs</a>.
</p>
</div>

Ausgabe
Code:
<br />
<b>Warning</b>:  main() [<a href='function.main'>function.main</a>]: Node no longer exists in <b>C:\Programme\xampp\htdocs\scripts\rss_newsfeed.php</b> on line <b>28</b><br />

		   
<item>
<title>Überschrift </title>
<description><![CDATA[Texttext .]]></description>
<link>url </link>

<author>Salzi</author>
</item>
		   
<item>
<title>Gästebuch </title>
<description><![CDATA[Das Gästebuch ist schön.]]></description>
<link>url2 </link>
<author>Salzi</author>
</item>
		   
<item>
<title>Medb</title>

<description><![CDATA[Das lässt sich evt. mir drastisch zugespitztem Selbstzweck erklären;
Dinge die ich mir irgendwo aufschreiben könnte landen hier, das spart Papier.
Im idealfall existiert der Datensatz parallel dazu in meinem Kopf, das hier könnte man als Stufe des Lernprozesses bezeichnen.
 ]]></description>
<link>url3 </link>
<author>Salzi</author>
</item>
		   
<item>
<title>Blog</title>
<description><![CDATA[do it yourself! So habe ich mir jetzt mein eigenes Blog gebaut. Vorher hatte ich so ein fertig CGI Scipt umgebaut,
was aber nicht so optimal war, da ich dazu u.a. den  style des Adminbereich des Hosters verschandelt hatte.
Es ist nun kein mobile weblog mehr, das heißt kein MMS und email posting, aber wer braucht solch Zeug?]]></description>
<link>url3 </link>
<author>Salzi</author>
</item>
		   

<item>
<title>Accessibility</title>
<description><![CDATA[Salzinet verhält sich flexibler denn je zuvor.
Mehr dazu findest du in den .
]]></description>
<link>?a=faq </link>
<author>Salzi</author>
</item>
 
so ist es was geworden.
PHP:
<?php

// config # muss dem xml enthaltenden file angepasst werden
$filename = '../content/news.php';
$feed_path = "../content/rss/rss.xml";
$fileContent_befor = "<div id=\"news\">";
$fileContent_after = "</div>";
$xmlEnd = "</div>";
$xml_dec = "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?>\n";
$next_page = "../content/rss/rss.xml";
// end config

function htmlentities_decode( $string ){
	$trans = get_html_translation_table(HTML_ENTITIES, ENT_QUOTES);
	$trans = array_flip($trans);
	return strtr($string, $trans);
}

if(file_exists($filename)) {
	$file = file_get_contents($filename);

	$file = strstr ( $file, $fileContent_befor ); // nimmt Inhalt ab beginn der relevanten stelle

	$file_tale = strchr ($file, $fileContent_after); // ertfernt überflüssigen Inhalt

	$file = str_replace($file_tale, $xmlEnd, $file); // entfernt überflüssigen Inhalt

	$xml_file = $xml_dec . $file;

//echo htmlentities_decode($xml_file)."<br>\n". $xml_file."<br>\n";

		//$xml = simplexml_load_string(htmlentities_decode(file_get_contents($filename)));//Lädt die XML-Datei in ein Objekt
		
		//$xml = simplexml_load_string(htmlentities_decode($xml_file));	//Lädt die XML-Datei in ein Objekt
		
		$xml = simplexml_load_string($xml_file);	//Lädt die XML-Datei in ein Objekt
		
	    /*if($xml) {    //Prüfen, ob Datei Fehler enthielt
		*/
	}else{
			echo '<p>Die Datei names '. $filename .' konnte nicht geöffnet werden</p>';
		}
	

$i=0;

while(!empty($xml->h2[$i])) {



	foreach($xml->p[$i]->a->attributes() as $a => $b) {
	  // echo $a,'="',$b,"\"\n";
		if($a == "href"){
	 		$xml_a_href = utf8_decode($b);
		}elseif(empty($b)){
			$xml_a_href = "";
		}
	} 


	$xml_h2 = utf8_decode($xml->h2[$i]);
	$xml_p = utf8_decode($xml->p[$i]);
	$xml_date = utf8_decode($xml->h2[$i]->span);
	
	$rss_itemNews .="
		   
<item>
<title>$xml_h2</title>
<description><![CDATA[$xml_p<br/>\nDatum $xml_date]]></description>
<link>$xml_a_href </link>
<author>Salzi</author>
</item>";


$i++;
}
//echo $rss_itemNews;

//Blog
require ('db-access.inc.php');		// login db

$sql = "SELECT *  FROM `blog` ORDER BY -id";

$result = mysql_query($sql);

$row = mysql_fetch_array($result);

$text_all = explode(' ', $row[text]);

for($x = 0; $x < 80; $x++){
  $blog_content .= $text_all[$x]." ";
  }
  if($text_all["81"]){
  	$blog_content .=  "...";
	}

$blog_h = $row["headline"];
$blog_date = $row["date"];

$rss_itemBlog="

<item>
<title>$blog_h</title>
<description><![CDATA[ $blog_content <br/>\nDatum $blog_date]]></description>
<link>?a=11&b=0&blog=win</link>
<author>Salzi</author>
</item>";

//Datum

$date = date("d.m.y H:i");

$rss = $xml_dec."<rss version=\"2.0\">
<channel>
<title>Salzinet</title>
<link>www.salzinet.com/</link>
<description>Blog  und News</description>
<language>de-de</language>
<copyright>by salzinet.com</copyright>
<pubDate>$date</pubDate>
$rss_itemBlog
$rss_itemNews
</channel>
</rss>";

$array_1 = array('?a=','&');
$array_2 = array('index.php?a=','&amp;');




$rss = str_replace( $array_1, $array_2, $rss);

$feed = fopen("$feed_path","w");
fwrite($feed, $rss, 6100);
fclose($feed);

header("Location: $next_page");
?>
 
Zurück