Ankündigung

Einklappen
Keine Ankündigung bisher.

SimpleXML: Doppelpunkt im Elementnamen

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • SimpleXML: Doppelpunkt im Elementnamen

    Hallo!

    Ich habe ein Problem mit SimpleXML unter PHP5. Konkrekt geht es um einen Elementnamen in einem XML-Dokument, der einen Doppelpunkt enthält. Dieses Element schaffe ich nicht einzulesen.

    Es geht um folgendes XML-Dokument:

    <?xml version="1.0" encoding="utf-8"?><rss version="2.0" xmlns:zubka="http://zubka.com/services/rss-ext">
    <channel>
    ...
    <item>
    ...
    <zubka:title>Customer Service in Germany</zubka:title>
    ...
    </item>
    ...

    "zubka:title" möchte ich einlesen.

    Versuch 1:
    ...
    $xml = new SimpleXMLElement(file_get_contents($feed->url));
    $parsed_source = new stdClass();
    $parsed_source->title = "Zubka XML Feed";
    $parsed_source->description = "Jobs ";
    $parsed_source->items = array();
    foreach( $xml->channel->item as $result ){
    $curr_item = new stdClass();
    $curr_item->title = (string)$result-> zubka:title;
    ...

    Bringt die Fehlermeldung “Parse error: syntax error, unexpected ':' in /home/XXXXXX/XXXXXX/modules/XXXXXX/parser_zubka/parser_zubka_xml.module on line 77” (ist die Zeile “$curr_item->title = (string)$result-> zubka:title;”)


    Versuch 2:
    ... $xml = new SimpleXMLElement(file_get_contents($feed->url));
    $parsed_source = new stdClass();
    $parsed_source->title = "Zubka XML Feed";
    $parsed_source->description = "";
    $parsed_source->items = array();
    foreach( $xml->channel->item as $result ){
    $curr_item = new stdClass();
    $curr_item->title = (string)$result-> {'zubka:title'};
    ...


    (Nach PHP: Beispiele - Manual Beispiel #3)
    Bringt keine Fehlermeldung, es werden aber auch keine Daten importiert.

    Hat jemand einen Tipp für mich, wie ich dieses 'zubka:title' mit simplexml erfolgreich ansprechen kann. Alle normalen Elemente ohne Sonderzeichen im Elementnamen funktionieren übrigens problemlos.

  • #2
    Hallo swmsherl und herzlich willkommen im Forum,

    ein ähnliches Problem wurde vor einiger Zeit in einem anderen Thread angesprochen. Scheint so, als kommt simpleXml mit den Namespaces nicht so wirklich zurecht:

    http://www.php.de/php-einsteiger/133...media-rss.html
    [URL="https://www.quizshow.io/"]Create your own quiz show.[/URL]

    Kommentar


    • #3
      namespace_prefix:local_name
      Das Prefix ist einem URL zugeordnet. Ausschlaggebend ist (sollte sein) der URL, nicht der Prefix. Das gleiche Dokument könnte auch so aussehen
      Code:
      <?xml version="1.0" encoding="utf-8"?>
      <rss version="2.0" xmlns:clonk="http://zubka.com/services/rss-ext">
       <channel>
        <item>
         <clonk:title>Customer Service in Germany</clonk:title>
        </item> 
       </channel>
      </rss>
      Mit SimpleXML kannst Du zur Zeit nur über die Methode children() auf Namespaces zugreifen
      PHP-Code:
      <?php
      $rss 
      = new SimpleXMLElement('<rss version="2.0" xmlns:zubka="http://zubka.com/services/rss-ext">
       <channel>
        <item>
         <zubka:title>Customer Service in Germany</zubka:title>
        </item> 
       </channel>
      </rss>'
      );
      echo 
      $rss->channel->item->children('http://zubka.com/services/rss-ext'false)->title[0];
      Wenn Du unbedingt das Prefix statt der URL verwenden willst, kannst Du auch children('zubka', true) verwenden. Aber das ist nicht das, was sich die Erfinder von XML gedacht haben.

      PHP: SimpleXMLElement->children() - Manual

      Kommentar

      Lädt...
      X