Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Parser findet Handler nicht

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Parser findet Handler nicht

    Ich möchte Amazon-XML-Dateien parsen. Dafür hab ich eine Parser-Klasse geschrieben. Die Funktion, die den Parser startet, ist innerhalb der Klasse und die Funktionen (Handler) für die Elemente und die Inhalte sind auch in der Klasse. Beim Ausführen kommt jedoch folgender Fehler:

    Warning: xml_parse() [function.xml-parse]: Unable to call handler endElement()

    Woran könnte das liegen. Die Namen von der Zuweisung und der Funktion stimmen überein. Kann die Tatsache, dass alles in einer Klasse liegt, die Fehlerquelle sein und er schlichtweg die Funktion nicht findet, obwohl es die selbe Klasse ist?

    Matthias

  • #2
    Zitat von interound
    und er schlichtweg die Funktion nicht findet, obwohl es die selbe Klasse ist
    In der Klasse von xml_parse? Glaube ich nicht.
    http://de3.php.net/manual/en/functio...nt-handler.php
    Note: Instead of a function name, an array containing an object reference and a method name can also be supplied.

    Aber zeig uns doch einfach mal den Code. Das ist viel leichter als rumraten.

    Kommentar


    • #3
      Code:
      class amazonprodukt {	
      	
      	//---Variablen deklarieren---
      	private $tag;
      	private $parenttag;
      	private $accesskey;
      	public $titel;
      	public $listenpreis;
      	public $angebotspreis;
      	public $bild;
      	public $produktart;
      	private $amazonlink;
      	
      	//---Handler für Startelement---
      	function startElement($parser,$element_name,$element_attribute) {
      		//---Position speichern---
      		$this->tag = strtolower($element_name);
      		}
      	
      	//---Handler für Endelement---
      	function endElement($parser,$element_name) {
      		//---Position löschen---
      		$this->tag = "";
      		//---voriges Element---
      		$this->parenttag = strtolower($element_name);
      		}
      	
      	//---Handler für Informationen der Tags---
      	function cdata($parser,$element_inhalt) {
      		//---je nach Element passende Variable füllen---
      		switch($this->tag) {
      			case "title": $this->title = $element_inhalt;
      			break;
      			case "formattedprice": if($this->parenttag == "listprice") { $this->listenpreis = $element_inhalt; }
      			break;
      			case "formattedprice": if($this->parenttag == "lowestnewprice") { $this->angebotspreis = $element_inhalt; }
      			break;
      			case "url": if($this->parenttag == "mediumimage") { $this->bild = $element_inhalt; }
      			break;
      			case "productgroup": $this->produktart = $element_inhalt;
      			break;
      			}
      		}
      	
      	//---Ausführung des Parsens der XML-Datei---
      	function get_infos($asin) {
      		//---Link zur XML-Datei von Amazon erstellen---
      		$this->amazonlink = "http://webservices.amazon.de/onca/xml?Service=AWSECommerceService&AWSAccessKeyId=".$this->accesskey."&Operation=ItemLookup&IdType=ASIN&ItemId=".$asin."&ResponseGroup=Medium,OfferFull";
      		//---XML-Datei von Amazon einlesen---
      		$xmlFile = file($this->amazonlink);
      		//---Parser erstellen---
      		$parser = xml_parser_create();
      		//---Handler für Start- und Endtags---
      		xml_set_element_handler($parser,"startElement","endElement");
      		//---Handler für Informationen der Tags---
      		xml_set_character_data_handler($parser,"cdata");
      		//---Parsen---
      		foreach($xmlFile as $elem) {
      			xml_parse($parser,$elem);
      			}
      		//---Ressourcen wieder freigeben---
      		xml_parser_free($parser);
      		}
      	
      	}

      Kommentar


      • #4
        Zitat von Bruchpilot
        http://de3.php.net/manual/en/functio...nt-handler.php
        Note: Instead of a function name, an array containing an object reference and a method name can also be supplied.
        PHP-Code:
        xml_set_element_handler($parser,array($this,"startElement"),array($this,"endElement")); 

        Kommentar


        • #5
          ich danke vielmals.

          Jetzt habe ich zwar ein anders Problem gefunden, aber das bekomme ich ja vielleicht auch alleine hin Wenn nicht, komme ich wieder

          Also nochmal: Vielen Dank für die schnelle Hilfe!

          Matthias

          Kommentar


          • #6
            Dann aber erstmal länger selbst am Problem arbeiten.

            http://www.phpfriend.de/forum/ftopic21515.html
            Hier wird weder das Handbuch vorgelesen noch Suchanfragen formuliert. Das kannst Du schon, weil Du kein Anfänger mehr sein willst.

            Kommentar


            • #7
              ihr kennt nicht zufällig noch andere Verfahrensweisen, die ähnlich simpel sind?

              Diese Verfahrensweise scheint doch sehr lange Ladezeiten nach sich zu ziehen.

              Matthias

              Kommentar

              Lädt...
              X