Zum Inhalt springen

Probleme bei XML Ausgabe

Erstellt am 10. Februar 2009 · 6 Antworten · letzte Antwort am 10. Februar 2009

Tags: Frage

BlackPixel ·

Hallo Community,

ich muss für eine selbst entwickelte Extension eine XML Schnittstelle für weitere TYPO3 Projekte erstellen. Dabei sollen andere Seiten per XML Daten anfragen können.
Die Eigentlich Extension funktioniert auch soweit. Nun haperts aber bei der eigentlichen XML Ausgabe.

Ich habe mir gedacht, ich erstelle per TS eine typenum und führe dann die Ausgabe durch meine Extension aus.

XML = PAGE
#neuen PageTyp für XML anlegen
XML.typeNum = 2
XML.config {
  
   #entfernt diverse header angaben
   disableAllHeaderCode = 1
 
   #standard doctype deaktivieren
   disableCharsetHeader = 1
 
   #entfern die HTML Kommentare
   disablePrefixComment = 1
 
   #lege eigenen doctype an
   additionalHeaders = Content-Type: text/xml;charset=utf8
 
   #xml prolog anlegen
   xmlprologue = <?xml version="1.0" encoding="UTF-8"?>
   
}
XML.10 = USER_INT
XML.10.userFunc = tx_fonds_pi1->renderXML
  function renderXML($content, $conf) {
   echo 'test';
}

Es kommt:
XML-Verarbeitungsfehler: Kein Element gefunden

hmm..., ich steh grad total auf dem schlauch. Auch
XML.10.userFunc = tx_fonds_pi1->main

zeigt keine Wirkung. Kann es sein, das meine ext gar nicht erst angesprochen wird?

Danke für Unterstützung.

Gruß Manfred

Julian.​Hofmann ·

Hallo Manfred.

XML verzeiht viiiel weniger Syntaxfehler als (X)HTML. Der Hinweis "Kein Element gefunden" stellt die Frage, was denn ein XML-Element ist? Deine Ausgabe produziert im Moment:

<?xml version="1.0" encoding="UTF-8"?>
test

Das ist aber kein XML. Da fehlt bisschen was:

<?xml version="1.0" encoding="UTF-8"?>
<testelement>test</testelement>

Das sollte das Problem lösen.

Viele Grüße
Julian

BlackPixel ·

Nein, leider nicht...

	function main($content, $conf)	{
	$this->local_cObj = t3lib_div::makeInstance('tslib_cObj'); // Local cObj.

    $this->conf=$conf;
    $this->pi_setPiVarDefaults();
    $this->pi_loadLL();
    $this->pi_USER_INT_obj=1;       
	  $GLOBALS['TSFE']->set_no_cache();  	
	
	  $this->conf['templateFile'] ? $this->template = $this->cObj->fileResource($this->conf['templateFile']) : $this->template = $this->cObj->fileResource('EXT:fonds/res/template.html'); 

    $this->pi_initPIflexForm();
    $flexConf=array(); 
    $flexConf['anzeige'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'anzeige', 'sDEF');
    $flexConf['ausgangspunkt'] = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'ausgangspunkt', 'sDEF');
    
  	$this->flexConf = $flexConf;

    switch($flexConf['anzeige']) {
      case 'liste':
         $content =  $this->listView($content, $conf, $this->flexConf);
        break;
      case 'detail':
         $content =  $this->detailView($content, $conf, $this->flexConf);
        break;
      case 'dateien':
         $content =  $this->fileView($content, $conf, $this->flexConf);
        break;
      case 'xml':
         echo  $this->renderXML($content, $conf);
        exit;
   	 }
    
    #print_r($flexConf);
    return $this->pi_wrapInBaseClass($content);
	}

Das ist die Main und hier nochmal gefolgt die renderXML funktion in meiner class:

  function renderXML($content, $conf) {
    $content = '<testelement>test</testelement>';
  	echo $content;
  }

Ich bekomm definitiv keine Ausgabe wenn ich die Seite mit &type=2 aufrufe, nur die FF Fehlermeldung... ?!

Julian.​Hofmann ·

Hm, ok, dann zwei weitere Ideen:

1. Die Datei, die die Funktion renderXML enthält, ist in Typoscript eingebunden? includeLibs

2. Klappt die XML-Ausgabe, wenn Du mal nur TS verwendest?

XML.10 = TEXT
XML.10.value = <hello>world</hello>
BlackPixel ·

Hallo Julian,

zu 2: Sowas klappt ohne Probleme

zu 1: Die funktion renderXML ist in der Klasse tx_finds_pi1 enthalten und die Extension ist im EM geladen. Meine Frage: Muss ich dann dennoch über TS die Datei einbinden?

Danke und Gruß Manne

Julian.​Hofmann ·

Zu 2): Weiß ich nicht. Aber würde spekulieren, dass man's noch muss. Zwar dürfte die Datei TYPO3 ansich bekannt sein, nicht aber dem Typoscript-Parser.
Probieren schadet ja nichts.... #paralyzed#

BlackPixel ·

Na gut, probieren macht bekanntlich schlauer... wieder was gelernt :-) Passt, Funktion wird aufgerufen, nu kanns weitergehen!

Lieben Dank für Deine Unterstützung!

Manfred