[xml] output onderbreken (door error)

Pagina: 1
Acties:

  • r0bert
  • Registratie: September 2001
  • Laatst online: 26-04 17:38
Misschien is de topictitel niet helemaal duidelijk, dus zal nog evenv klein beetje verduidelijken:

Ik laat nu dmv PHP netjes XML uitspuwen en transformeer dat dmv XSL(T).. Werkt prima, alleen nu heb ik een probleempje want wil graag als er bepaalde errors voor doen, dat het script niet verder gaat en een error geeft.

Probleem is alleen dat er dat al een deel van de xmlstream geouput is en ik dus geen die('fout'); kan doen omdat er dan geen wellformed xml over blijft.

Ik ben dus eigenlijk op zoek naar een nette oplossing en alle geopende tags bijhouden wordt moeilijk (lees: onmogelijk). Verder is alles wegschrijven naar een string en dan op het eind pas echoën ook geen mogelijkheid doordat er meerdere bestanden geinclude worden.

edit:
versimpeld vbtje erbij:
"xml"
HTML:
1
2
3
4
5
6
<content>
    <module id="10">
          <titel>Nieuw</titel>
<!--   !!! hier doet zich een error voor maar als ik hier 
   <error id="404">pagina niet gevonden</error> neer zet zijn content 
   en module niet meer wellformed -->

[ Voor 35% gewijzigd door r0bert op 19-04-2005 21:24 ]


  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07-05 19:46
Verder is alles wegschrijven naar een string en dan op het eind pas echoën ook geen mogelijkheid doordat er meerdere bestanden geinclude worden.
Toch is dit echt de manier. In vrijwel geen enkel geval is het echt handig om zomaar een echo te plaatsen. Dit soort problemen horen daar inderdaad bij. Wat heeft includen verder met dit probleem te maken?

  • r0bert
  • Registratie: September 2001
  • Laatst online: 26-04 17:38
Er worden bestanden geïnclude waarin ook content geecho't wordt en dat zijn niet altijd mijn eigen aan te passen (dev)bestanden, maar kunnen ook php bestanden van iemand anders zijn.. die echo's kan ik niet opvangen bij mijn weten :)

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 07-05 19:46
PHP:
1
2
3
4
5
6
7
8
<?PHP
//ranzig voor de hopeloze gevallen bestaande uit 1 bestand zonder includes
$c=file_get_contents('jefile');
$c=str_replace('echo', '$GLOBALS['TMPOUT'].=', $c);
eval($c);

echo $GLOBALS['TMPOUT'];
?>


Ook kan je met output buffers werken: ob_start();

[ Voor 24% gewijzigd door djluc op 19-04-2005 21:41 ]


  • r0bert
  • Registratie: September 2001
  • Laatst online: 26-04 17:38
Aha, dan ga ik even wat lezen over OB.. die 1e manier wordt m iig niet ;)

Dus ob_start() in het begin van de output
ob_end_flush() op het eind van de output
en bij een error ob_end_clean() en die('<error id="404">Not Found</error>');

should do the trick? ;) Dat gaat ik dan even test :) Hoop echt wel dat het werkt..

[ Voor 64% gewijzigd door r0bert op 19-04-2005 21:48 ]


  • Terranca
  • Registratie: April 2000
  • Laatst online: 28-04 20:20
En anders kan je proberen met DOM te werken ( http://nl3.php.net/dom ), deze spuugt wel altijd valid XML uit :) (vind ik persoonlijk de mooiste optie)

  • r0bert
  • Registratie: September 2001
  • Laatst online: 26-04 17:38
Ik heb de ob..() manier werkende zoals ik in de post hierboven heb staan (alleen dan nog met behulp van een globale var $bErrorOccured :) Thnq DjLuc

@Terranca: Is inderdaad vast mooier, maar ook moeilijker om in mijn huidige systeem te verwerken. Maar in het vervolg zal ik daar zeker eerst naar kijken :)

  • MSalters
  • Registratie: Juni 2001
  • Laatst online: 09-04 22:08
Terranca schreef op dinsdag 19 april 2005 @ 22:06:
En anders kan je proberen met DOM te werken ( http://nl3.php.net/dom ), deze spuugt wel altijd valid XML uit :) (vind ik persoonlijk de mooiste optie)
Hoe kan dat? Als ik verplicht 10 output nodes heb, en na 5 gaat het fout, dan moet ik toch die andere 5 vullen. Als daar een regex constraint op staat zijn die zeker niet automatisch te vullen.

Dit is te vergelijken met het aanmaken van een object in OO. Als dat fout gaat, dan faalt het aanmaken van alle enclosing objecten, en dat wordt door excepties typisch ook afgedwongen. Als je de invariant van een deel niet kunt vaststellen, kun je de invariant van het geheel ook niet vaststellen.

Man hopes. Genius creates. Ralph Waldo Emerson
Never worry about theory as long as the machinery does what it's supposed to do. R. A. Heinlein

Pagina: 1