[php/XSLT] Snap het even niet meer

Pagina: 1
Acties:

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
Ik ben begonnen met XML/XSLT en heb voor de test een klein project gemaakt. Maar ik loop vast op het server side parsen :(

De handleiding en de diverse voorbeeldjes op het internet spreken elkaar ook tegen :( Dit komt waarschijnlijk door de verandering die is door gevoerd in 4.1.1 en 4.0.6

De handleiding zegt:
mixed xslt_process (resource xh, string xml, string xsl);
resource is duidelijk.
string xml mag/moet volgens de handleiding een verwijzing zijn naar een xml-file
string xsl mag/moet volgens de handleiding een verwijzing zijn naar een xsl-file

Het probleem is dat de meeste voorbeelden een string (de inhoud) door geven aan xslt_process en niet de filename. Verder worden de xml en xsl omgedraaid :? :? :?

iig werkt geen van deze optie's
Ik heb een voorbeeld van deze optie's op http://lucard.no-ip.com/xml/test.php .

Wie kan een beetje duidelijkheid geven wat er nou eigenlijk fout gaat? en hoe ik het kan oplossen?

Programmer - an organism that turns coffee into software.


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Ik gebruik dit
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
    // transform the XML data via XSLT to HTML
    if(xslt_process($TXSLDATA, $XMLDATA, $result))
    {
        echo $result;
    }
    else
    {
        echo "XSL Transformation error occured";
    }
?>

weet niet zo welke php versie

Ohja de functie voorschriften van de XML/XSL functies in PHP staan nog niet vast. Dus je moet er rekening mee houden dat dat kan veranderen (lees abstracte interface maken).

  • Orphix
  • Registratie: Februari 2000
  • Niet online
PHP Version 4.0.6

Maar nu ik je source bekijk, haal eens dit eruit
code:
1
header("Content-type: text/xml");

Als je dit stuurt zal IE het namelijk als XML document weergeven.

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
Op dinsdag 22 januari 2002 00:52 schreef Orphix het volgende:
PHP Version 4.0.6

Maar nu ik je source bekijk, haal eens dit eruit
code:
1
header("Content-type: text/xml");

Als je dit stuurt zal IE het namelijk als XML document weergeven.
Klik het linkje waarbij staat:
Om te testen zonder de header ga dan naar hier >:)

Was je al een stap voor ;)
Op dinsdag 22 januari 2002 00:48 schreef Orphix het volgende:
Ik gebruik dit
PHP:
1
2
3
4
5
6
7
8
9
10
11
<?
    // transform the XML data via XSLT to HTML
    if(xslt_process($TXSLDATA, $XMLDATA, $result))
    {
        echo $result;
    }
    else
    {
        echo "XSL Transformation error occured";
    }
?>

weet niet zo welke php versie
In PHP4.1.1 MOET je een XML resource identifier meegeven. Dus dit zal in ieder geval niet werken :(
Ohja de functie voorschriften van de XML/XSL functies in PHP staan nog niet vast. Dus je moet er rekening mee houden dat dat kan veranderen (lees abstracte interface maken).
Vanaf 4.1 staan de functies vast!

Programmer - an organism that turns coffee into software.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Rense/freak007 heeft een korte tutorial geschreven voor het toepassen van XSLT in PHP.... Heb alleen de link niet bij de hand :o .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Orphix
  • Registratie: Februari 2000
  • Niet online
Op dinsdag 22 januari 2002 00:56 schreef LuCarD het volgende:
In PHP4.1.1 MOET je een XML resource identifier meegeven. Dus dit zal in ieder geval niet werken :(

Vanaf 4.1 staan de functies vast!
oei :o

* Orphix gaat ff snel aan het werk :7

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Kijk eens aan: geen idee in welke versie het werkt: ik ben geen PHP kenner :) .

http://130.89.202.141/tutorial/php_xslt.html

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Er is idd. iets verandert in de structuut van xslt parsing in php van versie 4.0.6 naar 4.1.0. In 4.0.6 kon je nog gewoon xslt_process() gebruiken zonder eerst xslt handlers aan te moeten maken.

Omdat ze bij php er voor wouden zorgen dat er straks ook andere xslt parsers dan sabletron zijn te gebruiken, is er daardoor wat verandert. Nu het allemaal wat generieker is geworden, zijn ze zelf ook bezig om er voor te zorgen dat xalan gebruikt kan voor het parsen.

En wat is er nu anders dan?
Zoals te zien is in example 3 in de documentatie van xslt_process() zou je met de volgende code het tranformeren onder 4.1.0+ aan het werk moeten krijgen:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<?
// $xml and $xsl contain the XML and XSL data

$arguments = array(
     '/_xml' => $xml,
     '/_xsl' => $xsl
);

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments);
if ($result) {
    print "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
    print " variable, the \$result variable has the following contents\n<br>\n";
    print "<pre>\n";
    print $result;
    print "</pre>\n";
}
else {
    print "Sorry, sample.xml could not be transformed by sample.xsl into";
    print "  the \$result variable the reason is that " . xslt_error($xh) .
    print " and the error code is " . xslt_errno($xh);
}
xslt_free($xh);
?>

Hopelijk zegt het voorbeeld genoeg. De achterliggende gedachte van de argumenten staat ook wel op dezelfde pagina in de manual vermeld.

* Rense Klinkenberg vraagt zich eigenlijk af wat er onduidelijk was aan de docuemtatie op php.net :?

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
damn zeg, mag ik niet eens even lekker rustig een verhaaltje typen :(

Toen ik begon met m'n eerste reactie was er nog maar 1 reactie opde topic

:)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
freak007: Toen ik begon met m'n eerste reactie was er nog maar 1 reactie opde topic
Slome :P . Maar het ziet er buitengewoon nuttig uit :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Op dinsdag 22 januari 2002 01:12 schreef mbravenboer het volgende:
Slome :P . Maar het ziet er buitengewoon nuttig uit :) .
Ach, dan duurt het maar effe, maar de topicstarter heeft wel in 26 minuten een antwoord zo midden in de nacht :)

  • GiLuX
  • Registratie: Juni 1999
  • Laatst online: 12-11-2025
en voor wie het intereseert:
NEW: XSLT extension
Petr Cimprichs patch has now been committed to CVS, so users of the XSLT extension will now find that they can happily use Sablotron 0.8.

http://www.zend.com/zend/week/week71.php

"I disagree with what you are saying, but I will defend to the death your right to say it." -- not clear who


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Op dinsdag 22 januari 2002 01:24 schreef GiLuX het volgende:
en voor wie het intereseert:
Dat is waarschijnlijk een bugfixje geweest, want de verandering in de xslt interface van php is al een stuk eerder gebeurd.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
<officiele-topic-tip target="freak007">

[topic=384396/1/25]

Aardig gebruik van XPath axis: hoe simpel iets kan zijn wat moeilijk lijkt ;) .

</officiele-topic-tip>

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Op dinsdag 22 januari 2002 01:37 schreef mbravenboer het volgende:
<officiele-topic-tip target="freak007">

[topic=384396/1/25]

Aardig gebruik van XPath axis: hoe simpel iets kan zijn wat moeilijk lijkt ;) .

</officiele-topic-tip>
mmm, jij zit zeker met smart te wachten op een nieuw forum dat ook private messages zou ondersteunen :P

Maar dat ziet er idd. wel gaaf uit ja.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
freak007: mmm, jij zit zeker met smart te wachten op een nieuw forum dat ook private messages zou ondersteunen :P
Ach, je moet wat ;) . Trouwens ons oude XSLT raadseltje kan wellicht een nog stukje makkelijker als je wat handig gebruik maakt van wat axis... veel zat het niet schelen, maar je weet nooit :) .

[topic=289102/1/25]

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
Op dinsdag 22 januari 2002 01:19 schreef freak007 het volgende:

[..]

Ach, dan duurt het maar effe, maar de topicstarter heeft wel in 26 minuten een antwoord zo midden in de nacht :)
En had je nou gezegt dat readfile() alles naar de standaard output gooit ipv naar een string dan had het nog beter geweest. :)

Ik heb met me stomme kop readfile gebruikt |:( |:( |:( |:(
Je moet ook niet gaan coden als je moe bent. :o

Ik heb het nog niet geprobeert want ik zit nu op me werk. Maar ik ga er vanuit dat het wel zal werken. Ik laat het nog wel weten....

Thx.

Programmer - an organism that turns coffee into software.


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
oh, ik had eigenlijk niet eens naar je scripts gekeken. Maar mijn antwoord is een beetje een standaard antwoord op mensen die problemen hebben met xslt in php 4.1.0+

  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
Ik heb nu dit
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<?
// $xml and $xsl contain the XML and XSL data
$xml= join('',file("main.xml"));
$xsl= join('',file("main.xsl"));

$arguments = array(
     '/_xml' => $xml,
     '/_xsl' => $xsl
);

// Allocate a new XSLT processor
$xh = xslt_create();

// Process the document
$result = xslt_process($xh, 'arg:/_xml', 'arg:/_xsl', NULL, $arguments); 
if ($result) {
    print "SUCCESS, sample.xml was transformed by sample.xsl into the \$result";
    print " variable, the \$result variable has the following contents\n<br>\n";
    print "<pre>\n";
    print $result;
    print "</pre>\n";
}
else {
    print "Sorry, sample.xml could not be transformed by sample.xsl into";
    print "  the \$result variable the reason is that " . xslt_error($xh) . 
    print " and the error code is " . xslt_errno($xh);
}
xslt_free($xh);
?>

Maar dit werk niet ??? :? :? :?

Enig idee?

http://lucard.no-ip.com/xml/test3.php

Voor de XML files

Probleem is gevonden.... Maar of ik er blij mee ben?
In mijn XSL maak ik gebruik van deze regel:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" language="JavaScript">

Volgens mijn boek is die geldig en IE deed werkte er goed mee.

Sablotron verwacht deze regels:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="utf-8" />

Maar tot mijn grootte schrik werk vervolgens een deel van mijn XSL niet meer... :(
code:
1
2
3
4
5
6
7
8
9
10
11
12
<!-- LINK -->
<xsl:template match="LINK">
  <TR>
    <TD>
    <A>
    <xsl:attribute name="HREF"><xsl:value-of select="@href" /></xsl:attribute>
    <xsl:attribute name="TARGET"><xsl:value-of select="@target" /></xsl:attribute>
    <xsl:value-of />
    </A>
    </TD>
   </TR>
</xsl:template>

Hij valt over <xsl:value-of /> Volgens mijn boek mag dat gewoon, boek zal het wel fout hebben :(

Programmer - an organism that turns coffee into software.


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 23:45
Op dinsdag 22 januari 2002 17:53 schreef LuCarD het volgende:
Ik heb nu dit
Probleem is gevonden.... Maar of ik er blij mee ben?
In mijn XSL maak ik gebruik van deze regel:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl" language="JavaScript">

Volgens mijn boek is die geldig en IE deed werkte er goed mee.
Als IE er mee werkt betekent dat niet dat het ook goed is (denk maar eens aan gewone html).

Je geeft met de stylesheet mee dat je ook gebruik wil maken van javascript, bij sabletron moet je dat wat anders aangeven. Als je hier ook echt gebruik van maakt, zou je eens kunnen kijken naar http://www.gingerall.com/ga/html/jsdom-ref/apidocs/api-.Example.html waar een voorbeeld staat over het gebruik van de javascript extensie.
Sablotron verwacht deze regels:
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="html" indent="yes" encoding="utf-8" />
Dit is niet wat sabletron verwacht, maar iets wat sabletron accepteerd, met de <xsl:stylesheet> en <xsl:output> kan je nog veel meer meegeven, zoals ook in de XSLT Recommendation staat.
Maar tot mijn grootte schrik werk vervolgens een deel van mijn XSL niet meer... :(
...
Hij valt over <xsl:value-of /> Volgens mijn boek mag dat gewoon, boek zal het wel fout hebben :(
Een lege <xsl:value-of> lijkt me eigenlijk ook erg zinloos. Je geeft nl. aan dat je iets wil selecteren, maar vervolgens geef je niet aan wat je wil selecteren. Het volgende stukje komt uit de xslt DTD:
code:
1
2
3
4
<!ELEMENT xsl:value-of EMPTY>
<!ATTLIST xsl:value-of
  select %expr; #REQUIRED
  disable-output-escaping (yes|no) "no"

Het select attribuut is dus een verplicht attribuut. Helaas heeft je boek het dus niet helemaal bij het rechte eind.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Kleine aanvulling: die namespace die jij gebruikte was van de Working Draft (WD) van XSLT. IE had standaard tot voor kort in feite alleen ondersteuning voor deze Working Draft.... Je moet nu echter gewoon de XSLT 1.0 Recommendation van W3C gebruiken (en dus ook de namespace daarvan) die overigens al uit 1999 komt.

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • LuCarD
  • Registratie: Januari 2000
  • Niet online

LuCarD

Certified BUFH

Topicstarter
Op dinsdag 22 januari 2002 20:47 schreef freak007 het volgende:

[..]

Als IE er mee werkt betekent dat niet dat het ook goed is (denk maar eens aan gewone html).
Klopt maar ik dacht dat XML een strakke standaard was :(

[qoute]
Je geeft met de stylesheet mee dat je ook gebruik wil maken van javascript, bij sabletron moet je dat wat anders aangeven. Als je hier ook echt gebruik van maakt, zou je eens kunnen kijken naar http://www.gingerall.com/ga/html/jsdom-ref/apidocs/api-.Example.html waar een voorbeeld staat over het gebruik van de javascript extensie.
[/quote]

yummi yummi lees voer :)
Dit is niet wat sabletron verwacht, maar iets wat sabletron accepteerd, met de <xsl:stylesheet> en <xsl:output> kan je nog veel meer meegeven, zoals ook in de XSLT Recommendation staat.
[..]

Een lege <xsl:value-of> lijkt me eigenlijk ook erg zinloos. Je geeft nl. aan dat je iets wil selecteren, maar vervolgens geef je niet aan wat je wil selecteren. Het volgende stukje komt uit de xslt DTD:
code:
1
2
3
4
<!ELEMENT xsl:value-of EMPTY>
<!ATTLIST xsl:value-of
  select %expr; #REQUIRED
  disable-output-escaping (yes|no) "no"

Het select attribuut is dus een verplicht attribuut. Helaas heeft je boek het dus niet helemaal bij het rechte eind.
MS niet geloven is tot daar aan toe maar een leerboek :(
bah.
Maar ik kan gelukkig weer verder.... handleiding bij de hand lezen en trail by error :)

Programmer - an organism that turns coffee into software.


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
LuCarD: Klopt maar ik dacht dat XML een strakke standaard was :(
Klopt :) . XML is ook een standaard. Jouw code was ook wel geldige XML dus het is niet het punt van XML. XSLT is echter ook een standaard en dus geen Working Draft ;) . Dat IE al vrij vroeg de working draft implementeerde is misschien leuk, maar dat ze het daar lang bij gelaten hebben is vervelend. XML vereist strakke en duidelijke definities zoals bijvoorbeeld de namespace. Als je je daar niet goed aan houd werkt het gewoon niet. Dat is voor jou echter een voordeel: duidelijkheid. :) .
MS niet geloven is tot daar aan toe maar een leerboek :(
Als je met XSLT aan de slag gaat zou ik altijd de XSLT references op http://www.zvon.org erbij houden. Hier kan je heel makkelijk en snel zien wat waar is toegestaan volgens de W3C Recommendation :) .

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment


  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Op http://www.xfront.com kan je trouwens een zeer goede en prettige XSLT tutorial vinden.

Directe link:
http://www.xfront.com/xsl.zip

Blog, Stratego/XT: Program Transformation, SDF: Syntax Definition, Nix: Software Deployment

Pagina: 1