SimpleXML: Doppelpunkt im Elementnamen

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:

    PHP-Code:
    <?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:
    PHP-Code:
    ...
    $xml = new SimpleXMLElement(file_get_contents($feed->url));
    ...
    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” (77 ist die Zeile “$curr_item->title = (string)$result-> zubka:title;”)


    Versuch 2:
    PHP-Code:
    ...
    $xml = new SimpleXMLElement(file_get_contents($feed->url));
    ...
    foreach( 
    $xml->channel->item as $result ){
    $curr_item = new stdClass();
    $curr_item->title = (string)$result-> {'zubka:title'};
    ... 
    (Nach http://de3.php.net/manual/de/simplexml.examples.php -> 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
    Mit print_r($result) schauen, wie die Variable abgelegt ist.

    Kommentar


    • #3
      PHP-Code:
      <?php
          $xml 
      '<?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>
      </channel>
      </rss>'
      ;
          
          
      $simplexml = new SimpleXMLElement$xml );
          
      var_dump$simplexml );
      ?>
      Ergibt:
      Code:
      object(SimpleXMLElement)#1 (2) {
        ["@attributes"]=>
        array(1) {
          ["version"]=>
          string(3) "2.0"
        }
        ["channel"]=>
        object(SimpleXMLElement)#2 (1) {
          ["item"]=>
          object(SimpleXMLElement)#3 (0) {
          }
        }
      }
      Kann SimpleXML nicht mit Namensräumen umgehen?

      Wenn dem wirklich so ist, DOM kann damit umgehen!

      EDIT:
      Folgendermaßen funktioniert der Zugriff:
      PHP-Code:
      $simplexml->channel->item->children'zubka'true );
      // Oder über die Namensraum-URL:
      $simplexml->channel->item->children'http://zubka.com/services/rss-ext' ); 

      Zuletzt geändert von PHP-Desaster; 31.05.2008, 20:50.

      Kommentar


      • #4
        So, ich habe noch etwas weiter probiert.

        Ein item Element der XML Datei schaut wie folgt aus:
        PHP-Code:
                            <item>
                        <
        title>Customer Service in Germany Reward20000 GBP</title>
                        <
        link>[url]http://www.zubka.com/board/job_view.php?zjob=14275[/url]</link>
                        
        <guid isPermaLink="true">[url]http://www.zubka.com/board/job_view.php?zjob=14275[/url]</guid>
                        
        <description>BuySellVoip company ([url]www.buysellvoip.info[/url]) is pleased to offer you position in Germany:
        Classification:    Part-Time (10 hours a week) or Full time

        For futher details please contact  with us
        josephmambroj 
        (ayahoo.com or kengyori3 (ayahoo.com

        Your early reply will be appreciated
        .
        Regards</description>
                        <
        pubDate>Thu29 May 2008 13:12:18 +0100</pubDate>

                        <
        zubka:title>Customer Service in Germany</zubka:title>
                        <
        zubka:reward>20000 GBP</zubka:reward>
                        <
        zubka:sectors>Telecommunications</zubka:sectors>
                        <
        zubka:country>DE</zubka:country>
                        <
        zubka:company>Buysellvoip Inc</zubka:company>
                        <
        zubka:position></zubka:position>

                        <
        zubka:location>Germany</zubka:location>
                        <
        zubka:region>Any</zubka:region>
                        <
        zubka:contract>Permanent</zubka:contract>
                        <
        zubka:keywords>Sales,managerstudentgermanyberlinsofteuropart timefull timecustomers</zubka:keywords>
                        <
        zubka:travel_percent>none</zubka:travel_percent>
                        <
        zubka:highlights></zubka:highlights>

                        <
        zubka:prospects></zubka:prospects>
                        <
        zubka:renum_salary_min>400000.00</zubka:renum_salary_min>
                        <
        zubka:renum_salary_max>10000000.00</zubka:renum_salary_max>
                        <
        zubka:salary_description></zubka:salary_description>
                        <
        zubka:renum_prorata>per month</zubka:renum_prorata>
                        <
        zubka:renum_currency>GBP</zubka:renum_currency>
                        <
        zubka:renum_bonus></zubka:renum_bonus>

                        <
        zubka:cand_qualifications></zubka:cand_qualifications>
                        <
        zubka:cand_experience></zubka:cand_experience>
                        <
        zubka:cand_personality></zubka:cand_personality>
                        <
        zubka:cand_top3></zubka:cand_top3>
                        <
        zubka:cand_extra></zubka:cand_extra>
                        <
        zubka:job_id>14275</zubka:job_id>
                        <
        zubka:advert_id>4310</zubka:advert_id>
                        <
        zubka:expires>2008-07-24 13:12:18</zubka:expires>

                        <
        zubka:closes></zubka:closes>
                        <
        zubka:hirer_type>End Hirer</zubka:hirer_type>
                    </
        item
        1) print_r (X)
        PHP-Code:
        $xml = new SimpleXMLElement(file_get_contents($feed->url));
        print_r($xml); 
        und
        PHP-Code:
        $xml = new SimpleXMLElement(file_get_contents($feed->url)); 
        foreach( 
        $xml->channel->item as $result ){
        print_r($result); 
        zeigen alle Elemente bis einschließlich pubdate. Ales was danach im XML kommt (zubka:XXX] wird nicht gezeigt.

        2) var_dump
        PHP-Code:
        $xml = new SimpleXMLElement(file_get_contents($feed->url));
        var_dump($xml); 
        zeigt alle Elemente bis einschließlich pubdate. Ales was danach im XML kommt (zubka:XXX) wird nicht gezeigt.

        Problem wird also wahrscheinlich an SimpleXML und dessen Unterstützung von Namensraumen liegen...

        ================================================
        Werde nachher noch einmal Tipp von PHP-Desaster testen.
        Zuletzt geändert von swmsherl; 31.05.2008, 21:14.

        Kommentar


        • #5
          Original geschrieben von PHP-Desaster
          PHP-Code:
          $simplexml->channel->item->children'zubka'true ); 
          OK, damit hat es funktioniert! D A N K E !!!

          Kommentar


          • #6
            Ähnliches Problem

            ich habe ein ähnliches Problem:

            Code:
            <entry>
            <id im:id="595831580">blabla</id>
            </entry>
            Nun möchte ich gern die 595831580 auslesen.
            Habe es mit:

            Code:
            $idAtt = $xml->entry[$i]->id->attributes();
            $id	= $idAtt->children('im',true)->id;
            probiert, geht aber leider nicht

            Kann mir jemand helfen?

            Vielen Dank!

            Kommentar


            • #7
              Zitat von per4mer Beitrag anzeigen
              Kann mir jemand helfen?
              Meistens gibt es mehr als einen Weg, doch wenn Du Dich erst einmal an das hältst, was bereits geschrieben wurde, dann sollte es doch wohl für den Anfang genügen.

              PHP-Code:
              <?php

              $xml 
              "<?xml version='1.0' ?>
              <nachricht xmlns:im='http://example.net/'>
                <entry>
                  <id im:id='595831580'>blabla</id>
                </entry>
              </nachricht>"
              ;

              $neuxml = new SimpleXMLElement($xml);
              $result $neuxml->xpath("entry/id");

              echo 
              $result[0]."<br>";
              echo 
              $result[0]->attributes("im",true)->id."<br>";

              /* Ausgabe:

              blabla
              595831580
              */

              ?>

              Kommentar

              Lädt...
              X