[PHP+XSL] entity reference in XSL sheet wordt genegeerd?

Pagina: 1
Acties:

  • .Johnny
  • Registratie: September 2002
  • Laatst online: 27-10-2025
ik probeer het volgende te doen:

$data bevat de xml content.

code:
1
2
3
4
5
6
7
$xml = new DOMDocument;
$xml->loadxml($data);
$xsl = new DOMDocument;
$xsl->load('page.xsl');
$proc = new XSLTProcessor;
$proc->importStyleSheet($xsl); 
return $proc->transformToXML($xml);


de xsl file bevat een aantal non-braking spaces ( ) en om die goed te laten parsen (anders krijg ik een error) heb ik in de header van de xsl gezet:
code:
1
2
3
<!DOCTYPE stylesheet [
<!ENTITY nbsp "&#xa0;" >
]>


maar dit helpt niks. De error is wel weg, maar ik krijg nog steeds geen &nbsp; in de output. Sterker nog, het lijkt alsof de entity translation door de parser vergeten wordt, want als ik dit doe:
<!ENTITY nbsp "SPACE" >
zou ik toch een pagina vol met "SPACE" moeten krijgen, maar dat gebeurt helemaal niet!

iemand een idee?

[ Voor 9% gewijzigd door .Johnny op 22-03-2006 12:00 ]


  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
als ik een spatie wil hebben, dan type ik altijd
code:
1
 
erin .. dat werkt wel ..

op dpawson hebben ze er ook wat over te melden. misschien dat het je helpt.

[ Voor 4% gewijzigd door joopst op 22-03-2006 13:20 ]


  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:58

crisp

Devver

Pixelated

Geen html-entities gebruiken in XML

Intentionally left blank


  • .Johnny
  • Registratie: September 2002
  • Laatst online: 27-10-2025
joopst schreef op woensdag 22 maart 2006 @ 13:16:
als ik een spatie wil hebben, dan type ik altijd
Daarom deed ik dus ook dit:
code:
1
2
3
<!DOCTYPE stylesheet [
<!ENTITY nbsp "&#xa0;" >
]>
dat doet precies wat jij met de hand loopt te doen. Althans, dat zou moeten. Dat proberen ze trouwens ook op die link die je aanwijst.
Geen html-entities gebruiken in XML
Moet ik dit echt serieus nemen? html entity, whatever entity gebruik maakt natuurlijk niks uit. Dus je mag helemaal geen entities gebruiken? waar zijn die entities anders voor uitgevonden? om leesbare code mogelijk te maken. Maargoed, entities moeten dus gewoon werken, als je het maar declareert. Alleen schijnt de php xsl parser dus de entity translation te "vergeten". de cocoon parser pikt t wel.
zoiets als dit: <!ENTITY testent "TEST"> en dan in xsl &testent; werkt ook niet.

voorlopige oplossing, maar niet zo mooi:
code:
1
$xsl_c = str_replace('&nbsp;','&#xa0;',file_get_contents('page.xsl'));

[ Voor 35% gewijzigd door .Johnny op 22-03-2006 14:57 ]


  • .Johnny
  • Registratie: September 2002
  • Laatst online: 27-10-2025
maar er is dus verder niemand bekend met het probleem van php's xsl en entity referencing?

  • crisp
  • Registratie: Februari 2000
  • Laatst online: 18:58

crisp

Devver

Pixelated

GIJoke schreef op donderdag 23 maart 2006 @ 13:16:
maar er is dus verder niemand bekend met het probleem van php's xsl en entity referencing?
Ik heb geen idee of PHP's implementatie van XSLT ueberhaupt wel custom rules uit je DTD parsed - blijkbaar niet en hence ook mijn opmerking om geen HTML-entities te gebruiken of in ieder geval te zorgen dat je die netjes omzet naar XML-entities (numeriek dus). Dat kan vrij simpel mbv html_entity_decode() en een functie rondom get_html_translation_table(). Als je UTF-8 gebruikt hoef je overigens enkel nog maar de speciale karakters terug om te zetten naar een entity, en laten die als named entity ( & < > " ) nu toevallig wèl gedefinieerd zijn voor XML ;)

[ Voor 3% gewijzigd door crisp op 23-03-2006 15:51 ]

Intentionally left blank


  • .Johnny
  • Registratie: September 2002
  • Laatst online: 27-10-2025
hmm, dat was dus ook mijn vraag. maar ik blijf het vreemd vinden dat de parser wel een entity declaration vereist (anders krijg je errors), maar vervolgens te lui is om de entity translation uit te voeren. dan inderdaad php maar de entity translation laten doen, zoals je ongetwijfeld zag was ik daar met enkel de nbsp via een omweg al mee begonnen dmv de str_replace.

maar toch, blijf 't vaag vinden dat dit door php niet goed wordt afgehandeld. 't is geen rocket-xml-science ofzo om entities te gebruiken.
Pagina: 1