Anzeige - [Hier werben / Mediadaten]
(?) Tags raten (?) (edit)
 
Reply to this topicStart new topicStart Poll
Diskussion

xml über php in html parsen

probleme mit description

Flipper
Felgenspezi2000
Geschrieben am: Mi 9.12.2009, 14:43
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 64
Mitglied seit: 29.07.2007


Hallo liebe php´ler,

ich möchte auf der Detailseite meines RSS- Verzeichnisses die Links des RSS- Feeds auslesen. Es ist mir mit folgendem Parser gelungen:

CODE
<?

// the recording-constants - need to start with a value > 0 !
define ("RSS_CHANNEL",          "1");
define ("RSS_IMAGE",            "2");
define ("RSS_ITEM",             "3");

class RSSParser {

 // parser dependant variables
 var $objParser;
 var $intOnRecording;
 var $strLastParsingError;
 var $strLastData;

 // data dependent variables
 var $arrRSSChannel;
 var $arrRSSItems;
 var $inxRSSItems;



 // class constructor
 function RSSParser() {

   $this->strLastParsingError  = array();
   $this->arrRSSChannel        = array();
   $this->arrRSSItems          = array();
   $this->inxRSSItems          = 0;
   $this->strLastData          = "";
   $this->intOnRecording       = 0;
   $this->objParser            = xml_parser_create();

   // set the default handlers
   xml_set_object($this->objParser, $this);
   xml_set_element_handler($this->objParser, "openTag", "closeTag");
   xml_set_character_data_handler($this->objParser, "data");

 } // constructor



 function runRSSParsingProcess ($strXMLCode) {

   // parse the given XML-Code
   xml_parse($this->objParser, $strXMLCode);

 } // runRSSParsingProcess


 // parser dependent methods
 // ==================================================================

 function openTag($parser, $tag, $attr) {

   switch ($tag) {

     // set the recording flag
     case "CHANNEL":   $this->intOnRecording = RSS_CHANNEL;  break;
     case "IMAGE":     $this->intOnRecording = RSS_IMAGE;    break;
     case "ITEM":      $this->intOnRecording = RSS_ITEM;     break;

   } // switch

   // handle attributes of tags
   switch ($tag) {
     case "RSS":
       $this->arrRSSChannel["version"] = $attr["VERSION"]; break;
   }  // switch

 } // function openTag(..)




 function closeTag($parser, $tag) {

   if ($this->intOnRecording == RSS_CHANNEL) {

     switch ($tag) {
       case "TITLE":         $this->arrRSSChannel["title"]       = $this->strLastData;   break;
       case "LINK":          $this->arrRSSChannel["link"]        = $this->strLastData;   break;
       case "DESCRIPTION":   $this->arrRSSChannel["description"] = $this->strLastData;   break;
     } // switch

   } else if ($this->intOnRecording == RSS_IMAGE) {

     switch ($tag) {
       case "TITLE":         $this->arrRSSChannel["imageTitle"]  = $this->strLastData;   break;
       case "URL":           $this->arrRSSChannel["imageURL" ]   = $this->strLastData;   break;
       case "LINK":          $this->arrRSSChannel["imageLink" ]  = $this->strLastData;   break;
     } // switch

   } else if ($this->intOnRecording == RSS_ITEM) {

     switch ($tag) {
       case "ITEM":          $this->inxRSSItems++;                                                   break;
       case "TITLE":         $this->arrRSSItems[$this->inxRSSItems]["title"] = $this->strLastData;   break;
       case "LINK":          $this->arrRSSItems[$this->inxRSSItems]["link"] = $this->strLastData;    break;
     } // switch

   } // if..else (onRecording)

   $this->strLastData = "";

 } // function closeTag(..)



 function data($parser, $data) {

   if ($this->intOnRecording != 0) {
     $this->strLastData .= trim($data);
   } // if

 } // function data(..)




 // get methods
 // ==================================================================

 function getRSSChannel() {
   return $this->arrRSSChannel;
 } // getRSSChannel()

 function getRSSItems() {
   return $this->arrRSSItems;
 } // getRSSItems()


} // class rssParser

?>


Folgenden Code habe ich in die entsprechende Datei eingebunden:

CODE
<?php
// include the parser class
require_once ("RSSParser.class.php");

$rssParser = new RSSParser();

$rssSource = sefReltoAbs('index.php?option=com_linkdirectory&amp;task=detail&amp;id='.$link->id.'&amp;Itemid='.$this->row->url);

$rssFile = implode("",file($rssSource));

#echo "RSS-Quelle: ".$rssSource;

// start the parsing process
$rssParser->runRSSParsingProcess ($rssFile);

// get the arrays and print the information
$channelInfo = $rssParser->getRSSChannel();
$rssItems    = $rssParser->getRSSItems();

if (isset ($channelInfo["version"]) ) {
 echo "<br>RSS-Version: ".$channelInfo["version"];
} // if
echo "<br>";
if ( isset($channelInfo["imageURL"]) && $channelInfo["imageURL"] != "" ) {
 echo "<a href=\"".$channelInfo["imageLink"]."\">";
 echo "<img src=\"".$channelInfo["imageURL"]."\" ";
 echo "title=\"".$channelInfo["imageTitle"]."\"";
 echo "/>";
 echo "</a>";
} // if
echo "<br>Titel: <b>".utf8_decode($channelInfo["title"])."</b>";
echo "<br>Beschreibung: <b>".utf8_decode($channelInfo["description"])."</b>";
echo "<br>Beiträge: <b>".count($rssItems)."</b>";

$i = 20;
foreach ($rssItems as $item) {
 if (--$i < 0)
   break;
 echo "<br><h3>";
 echo "<a href=\"".$item["link"]."\">";
 echo "<span class=\"rssItem\">";
 echo $item["title"];
 echo "</span>";
 echo "</a>";
} // foreach


?>


Nun mein Anliegen:

Ich möchte nicht nur den Titel und den Link auslesen, sondern auch die Description zu jedem einzelnen Item untereinander anzeigen lassen.

Für Tips bin ich sehr dankbar :-)

Gruss


--------------------
Top
PMEmail PosterUsers Website
Top
 
 
Alonso
WEPAX.com
#2 Geschrieben am: Mi 9.12.2009, 14:58 (+00:14)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 620
Mitglied seit: 10.02.2005


Wenn dir dieser Parser wirklich selbst "gelungen" ist - dann könntest du dir die Frage spielend selbst beantworten wink.gif


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Flipper
Felgenspezi2000
#3 Geschrieben am: Mi 9.12.2009, 15:00 (+00:02)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 64
Mitglied seit: 29.07.2007


Hallo Alonso,

den Parser habe ich selbstverständlich nicht selbst erstellt und da ich keine Ahnung habe, poste ich hier rolleyes.gif


--------------------
Top
PMEmail PosterUsers Website
Top
 
Alonso
WEPAX.com
#4 Geschrieben am: Mi 9.12.2009, 16:16 (+01:16)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 620
Mitglied seit: 10.02.2005


Sorry, falsch interpretiert..

So grob überflogen müsste folgendes klappen:
CODE

..

foreach ($rssItems as $item) {
 if (--$i < 0)
   break;
 echo "<br><h3>";
 echo "<a href=\"".$item["link"]."\">";
 echo "<span class=\"rssItem\">";
 echo $item["title"];
 echo "</span>";
 echo "</a>";
 echo "<span class=\"rssDescription\">".$item["description"]."</span>";
} // foreach

..



--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Flipper
Felgenspezi2000
#5 Geschrieben am: Mi 9.12.2009, 16:39 (+00:22)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 64
Mitglied seit: 29.07.2007


Hab´s schnell mal getestet --> funktioniert leider nicht...

trotzdem vielen Dank!!


--------------------
Top
PMEmail PosterUsers Website
Top
 
Alonso
WEPAX.com
#6 Geschrieben am: Mi 9.12.2009, 17:14 (+00:35)
Report PostQuote Post

AyomRank 6
************

Gruppe: Member (aktiv)
Beiträge: 620
Mitglied seit: 10.02.2005


Okay, das wird noch nicht geparst.

Versuche mal das da (zusätzlich):
CODE

<?

// the recording-constants - need to start with a value > 0 !
define ("RSS_CHANNEL",          "1");
define ("RSS_IMAGE",            "2");
define ("RSS_ITEM",             "3");

class RSSParser {

// parser dependant variables
var $objParser;
var $intOnRecording;
var $strLastParsingError;
var $strLastData;

// data dependent variables
var $arrRSSChannel;
var $arrRSSItems;
var $inxRSSItems;



// class constructor
function RSSParser() {

  $this->strLastParsingError  = array();
  $this->arrRSSChannel        = array();
  $this->arrRSSItems          = array();
  $this->inxRSSItems          = 0;
  $this->strLastData          = "";
  $this->intOnRecording       = 0;
  $this->objParser            = xml_parser_create();

  // set the default handlers
  xml_set_object($this->objParser, $this);
  xml_set_element_handler($this->objParser, "openTag", "closeTag");
  xml_set_character_data_handler($this->objParser, "data");

} // constructor



function runRSSParsingProcess ($strXMLCode) {

  // parse the given XML-Code
  xml_parse($this->objParser, $strXMLCode);

} // runRSSParsingProcess


// parser dependent methods
// ==================================================================

function openTag($parser, $tag, $attr) {

  switch ($tag) {

    // set the recording flag
    case "CHANNEL":   $this->intOnRecording = RSS_CHANNEL;  break;
    case "IMAGE":     $this->intOnRecording = RSS_IMAGE;    break;
    case "ITEM":      $this->intOnRecording = RSS_ITEM;     break;

  } // switch

  // handle attributes of tags
  switch ($tag) {
    case "RSS":
      $this->arrRSSChannel["version"] = $attr["VERSION"]; break;
  }  // switch

} // function openTag(..)




function closeTag($parser, $tag) {

  if ($this->intOnRecording == RSS_CHANNEL) {

    switch ($tag) {
      case "TITLE":         $this->arrRSSChannel["title"]       = $this->strLastData;   break;
      case "LINK":          $this->arrRSSChannel["link"]        = $this->strLastData;   break;
      case "DESCRIPTION":   $this->arrRSSChannel["description"] = $this->strLastData;   break;
    } // switch

  } else if ($this->intOnRecording == RSS_IMAGE) {

    switch ($tag) {
      case "TITLE":         $this->arrRSSChannel["imageTitle"]  = $this->strLastData;   break;
      case "URL":           $this->arrRSSChannel["imageURL" ]   = $this->strLastData;   break;
      case "LINK":          $this->arrRSSChannel["imageLink" ]  = $this->strLastData;   break;
    } // switch

  } else if ($this->intOnRecording == RSS_ITEM) {

    switch ($tag) {
      case "ITEM":          $this->inxRSSItems++;                                                   break;
      case "TITLE":         $this->arrRSSItems[$this->inxRSSItems]["title"] = $this->strLastData;   break;
      case "LINK":          $this->arrRSSItems[$this->inxRSSItems]["link"] = $this->strLastData;    break;
      case "DESCRIPTION":   $this->arrRSSItems[$this->inxRSSItems]["description"] = $this->strLastData;    break;
    } // switch

  } // if..else (onRecording)

  $this->strLastData = "";

} // function closeTag(..)



function data($parser, $data) {

  if ($this->intOnRecording != 0) {
    $this->strLastData .= trim($data);
  } // if

} // function data(..)




// get methods
// ==================================================================

function getRSSChannel() {
  return $this->arrRSSChannel;
} // getRSSChannel()

function getRSSItems() {
  return $this->arrRSSItems;
} // getRSSItems()


} // class rssParser

?>


(Ungetestet)

Sollte dies klappen, wirst du als nächstes mit hoher Sicherheit Probleme mit den Umlauten haben..


--------------------
Top
PMEmail PosterUsers WebsiteICQ
Top
 
Flipper
Felgenspezi2000
#7 Geschrieben am: Mi 9.12.2009, 17:33 (+00:19)
Report PostQuote Post

AyomRank 4
********

Gruppe: Member (aktiv)
Beiträge: 64
Mitglied seit: 29.07.2007


Vielen Dank Alonso! Das funktioniert.

Das mit den Umlauten habe ich so gelöst:

CODE
foreach ($rssItems as $item) {
 if (--$i < 0)
   break;
 echo "<br><h3>";
 echo "<a href=\"".$item["link"]."\">";
 echo "<span class=\"rssItem\">";
 echo $item["title"];
 echo "</span>";
 echo "</a>";
 echo "<span class=\"rssDescription\">";
 echo "<br>Beschreibung: <b>".utf8_decode($item["description"])."</b>";
 echo "</span>";
} // foreach


Nochmals vielen Dank!!!

Gruß


--------------------
Top
PMEmail PosterUsers Website
Top
 
Thema wird von 0 Benutzer(n) gelesen (0 Gäste und 0 anonyme Benutzer)
0 Mitglieder:
Trackback-Url: http://www.ayom.com/track/t/33025

Topic Options Reply to this topicStart new topicStart Poll

 


> Ähnliche Themen
Geschäftsabwicklung über escrow.com Rued 104 0 Di 9.03.2010, 10:28
Studie über ca. 100 SEO Ranking Kriterien omc 1856 31 Di 2.03.2010, 12:17
Buchverkauf über Websites Martinus 397 6 Fr 19.02.2010, 13:13
Flash Datei in HTML einbinden Biker777 242 3 Di 16.02.2010, 17:02
XML Daten in HTML Kontrukt ausgeben Octane 192 4 Sa 13.02.2010, 11:41
IP-Secrets - alle Infos über deine IP-Adresse fluchen_net 1609 13 Di 9.02.2010, 09:16
Browser über definierte Internetverbindung Sancheck 151 0 So 3.01.2010, 09:32
Adwords über Google Maps organische Suchergebnisse deebee 274 0 Di 22.12.2009, 11:42
[V] E-Maildienst mit über 300 Mitgliedern BozZ_E 231 2 Mi 2.12.2009, 08:35
[S] Screendesigner und HTML/CSS Coder Sandro Feuillet 172 0 Fr 27.11.2009, 15:32




Anzeige - [Hier werben / Mediadaten]



Anzeigen


[Hier werben / Mediadaten]