Benjamin: Auslesefehler bei XML mit MagPie (wenn der Tag "image" heißt)

Hallo Community,

ich benutze magPie für die Auslesung von XML (mit PHP) und habe folgendes XML:

<item>
<title>Test</title>
<description>...</description>
<link>...</link>
<image>http://www.irgendwo.de/irgendwas.jpg</image>
</item>

Dann hole ich das XML mit magPie ab und führe folgendes durch:

$contentTitle = $item[title];
$contentLink = $item[link];
$contentImage = $item[image];

echo "TEST: $contentTitle - $contentImage -";

Das Ergebnis ist:

TEST: Test -  -

Es fehlt also die Imageurl. Ich habe den Verdacht, das image ein Keyword für PHP oder MagPie ist und daher nicht darauf zugegriffen werden kann. Eine Umwandlung in $contentImage = $item["image"]; führt ebenfalls zu keinem Ergebnis.

Ich würde mich sehr über Hilfe freuen!

MfG,
Benjamin

  1. Hello,

    Ich würde mich sehr über Hilfe freuen!

    ich rate blind...wie beispielhaft ist dein Code gemessen an dem, was du wirklich verarbeitest:

    1. was ist mit den Anführungszeichen beim assoziativen Arrayzugriff, sind die da?
    2. Steht in der Image-URL vielleicht ein nicht maskiertes Sonderzeichen?

    MfG
    Rouven

    --
    -------------------
    sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
    Because good guys need a break every once in a while.  --  Morty in "Click" (Columbia Pictures, 2006)
      1. was ist mit den Anführungszeichen beim assoziativen Arrayzugriff, sind die da?

      $contentImage = $item[image]; und $contentImage = $item["image"]; nehmen sich leider nichts. Das hatte ich schon ausprobiert und auch kurz im Hauptpost erwähnt.

      1. Steht in der Image-URL vielleicht ein nicht maskiertes Sonderzeichen?

      Nur Punkte, Doppelpunkte und Slashes - daran wird es auch nicht liegen, denke ich.

      MfG,
      Benjamin

      1. Hello,

        $contentImage = $item[image]; und $contentImage = $item["image"]; nehmen sich leider nichts. Das hatte ich schon ausprobiert und auch kurz im Hauptpost erwähnt.

        na ja, okay, hilft dir momentan nicht weiter, aber die erste Variante ist falsch, es sei denn du hast eine Konstante namens image. Auf was steht dein http://de2.php.net/error_reporting?

        MfG
        Rouven

        --
        -------------------
        sh:| fo:} ch:? rl:( br:& n4:{ ie:| mo:} va:) js:| de:] zu:| fl:( ss:) ls:& (SelfCode)
        Buy when there's blood running in the street and sell when everyone is pounding at your door, clawing to own your equities  --  Wisdom on Wallstreet
  2. Hallo Benjamin,

    Es fehlt also die Imageurl. Ich habe den Verdacht, das image ein Keyword für PHP oder MagPie ist und daher nicht darauf zugegriffen werden kann.

    Jein. Es ist noch doofer.

    Erstmal ist in RSS 2.0 image kein spezifiziertes Kindelement von item, sondern nur ein Kindelement von channel. Magpie hat dazu aber noch den Anspruch jedes beliebige Kindelement von item zu parsen. Aus diesen Bedingungen leitet der Autor von Magpie ein extrem dämliches Konzept her. Er implementiert den Parser als extrem einfachen und extrem dämlichen Endlichen Automaten, in dem es Zustände wie "initem" (Wir befinden uns innerhalb eines Items) und "inimage" (Wir befinden uns innerhalb eines image-Elementes) gibt. Wenn nun Dein //item/image auftaucht befindet sich der Magpie-Parser gleichzeitig in zwei Zuständen – etwas, was vom Magpie-„Programmierer“ sicherlich nie beabsichtigt war. Und dadurch passiert, was passieren muß: Da zwei Zustände gleichzeitig angenommen werden, wird der Inhalt des Image-Elementes nicht verarbeitet, weil es nicht mal auf den Stack gelegt wird, wie jedes andere unbekannte Element.

    Ganz ehrlich: Magpie RSS ist Mist. Oder um den lokalen Experten aus dem Self-Chat zu zitieren: »magpie ist totale scheisse [tm].« Außerdem wurde es seit 2005 nicht mehr weiter entwickelt. Magpie RSS gehört vergraben in den Müllhaufen der Geschichte.

    Nimm was anderes. SimplePie soll besser sein. Mit der Methode get_item_tags des Item-Objektes solltest Du auch auch exotischere Item-Kindelemente heran kommen, mit dem leeren Namensraum von RSS 2.0 wohl auch an Dein nicht RSS 2.0 konformes //item/image.

    Tim