[php xml/xslt] html in xml

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 19-09 12:45
Ik ben aan het klooien met xml/xslt dat gemaakt wordt door php. Ik ben alleen tegen het volgende probleem aangelopen: als ik html in mijn xml wilt zetten bijvoorbeeld:
code:
1
2
3
<hoi>
   <content><a href="http://hoi.nl">hoi</a></content>
</hoi>

Dan krijg ik de error
code:
1
Warning: Sablotron error on line 6: XML parser error 7: mismatched tag in ....... on line 23

Het is dus de bedoeling dat de inhoud van een pagina tussen <content> en </content> staat.
Ik heb dus geconstateerd dat er geen html tags tussen de xml tags kunnen staan. Hoe kan ik dit gaan oplossen? Ik wil namelijk wel html tags erin kunnen stoppen omdat ik anders echt niet verder kan.
Ik heb ook aal even in de xml van got gekeken en daar zie ik hetzelfde. Er worden gewoon html tags meegegeven in de xml.
Helaas bood de search geen uitkomst.

BVD

Acties:
  • 0 Henk 'm!

  • Rodyman
  • Registratie: November 2001
  • Laatst online: 08-06-2024

Rodyman

chillend

kun je niet: & lt; gebruiken ipv < en > zegmaar? zomaar een gok hoor...

[ Voor 17% gewijzigd door Rodyman op 05-01-2004 16:08 ]


Acties:
  • 0 Henk 'm!

  • Jaspertje
  • Registratie: September 2001
  • Laatst online: 18-09 17:01

Jaspertje

Max & Milo.. lief

Als je eens die // weg laat?? en die :

Acties:
  • 0 Henk 'm!

  • DizzyWeb
  • Registratie: Februari 2001
  • Laatst online: 05-09 14:30

DizzyWeb

Ondertiteld

Die < en dergelijke gaat niet zomaar, < is niet gedefinieerd in XML.

Ik ben absoluut geen expert, verre van... maar ik gok dat je het in een C-DATA block moet zetten...

Acties:
  • 0 Henk 'm!

  • djc
  • Registratie: December 2001
  • Laatst online: 08-09 23:18

djc

Of een CDATA section gebruiken of een paar characters (<, >, &) escapen. CDATA section is in dit geval waarschijnlijk netter.

[ Voor 35% gewijzigd door djc op 05-01-2004 16:11 ]

Rustacean


Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

Als we het dan toch over "netter" hebben, definieer dan gewoon voor de HTML tags die je toe wilt staan een template in je XSL.

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
En ik denk dat de fout ergens anders zit. Je stukje XML is zelfs met 'HTML'-tags nog gewoon XML.

Kan je er misschien voor zorgen dat je foutmelding regelnummers overeenkomen met je werkelijke XML en XSLT?

Acties:
  • 0 Henk 'm!

Verwijderd

Volgens mij zijn '<' en '>' gereserveerde karakters in XML. Die kan je alleen maar gebruiken voor de tags en dus niet zomaar in je data. Je moet dan &lt; en &gt; gebruiken.

[ Voor 26% gewijzigd door Verwijderd op 05-01-2004 16:23 ]


Acties:
  • 0 Henk 'm!

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 19-09 12:45
Rodyman schreef op 05 januari 2004 @ 16:07:
kun je niet: & lt; gebruiken ipv < en > zegmaar? zomaar een gok hoor...
Jaspertje schreef op 05 januari 2004 @ 16:08:
Als je eens die // weg laat?? en die :
Nee dat lukt helaas beiden niet.
DizzyWeb schreef op 05 januari 2004 @ 16:09:
Die < en dergelijke gaat niet zomaar, < is niet gedefinieerd in XML.

Ik ben absoluut geen expert, verre van... maar ik gok dat je het in een C-DATA block moet zetten...
Manuzhai schreef op 05 januari 2004 @ 16:11:
Of een CDATA section gebruiken of een paar characters (<, >, &) escapen. CDATA section is in dit geval waarschijnlijk netter.
Ga ik eens opzoeken. Ik ben er pas net mee begonnen.
edit: CDATA komt mooi van pas. Maar nu ik mijn html daartussen plaats wordt er < en > van gemaakt waardoor ik nu html tags in de browser zie. Wat doe ik daar dan aan? Dit is echt veel moeilijker dan ik dacht :|
drm schreef op 05 januari 2004 @ 16:12:
Als we het dan toch over "netter" hebben, definieer dan gewoon voor de HTML tags die je toe wilt staan een template in je XSL.
Zou idd netter zijn maar dat is onmogelijk te doen. Ja het is wel mogelijk maar dat gaat heel veel tijd kosten.
Sendy schreef op 05 januari 2004 @ 16:13:
En ik denk dat de fout ergens anders zit. Je stukje XML is zelfs met 'HTML'-tags nog gewoon XML.

Kan je er misschien voor zorgen dat je foutmelding regelnummers overeenkomen met je werkelijke XML en XSLT?
Nee als ik er gewone tekst neerzet gaat het gewoon goed.

[ Voor 13% gewijzigd door gomaster op 05-01-2004 16:31 ]


Acties:
  • 0 Henk 'm!

  • FlowinG
  • Registratie: Maart 2003
  • Laatst online: 19-09 17:00
Ik weet nu nog niet precies hoe het gaat: ik ga me deze week flink inlezen:) Heb eindelijk een (dik) boek gekocht. Maar wat ik wel weet is, dat dit nou het mooie van XML is: geen rare html tags. Als je website's wilt gaan maken moet je gebruik gaan maken met XHTML.

Als je toch XML wilt gebruiken moet je met andere ogen naar XML kijken: de taal is om data te structureren en niet om op te maken. Dat doe je allemaal in XSL(T). Maar miss is het een idee om HTML tags eruit te strippen en een link te vervangen door een XLINK.

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Een tag is een tag is een tag. XML maakt geen verschil. Het enige waarop je moet letten bij het includen van html in een xml bestand is dat de tags allemaal afgesloten moeten zijn. Daarom kom je dus snel uit op XHTML (waarin die eis van afgesloten tags is opgenomen.)

Ik denk nog steeds dat je 'fout' ergens anders zit. Je handelt de tekst in <content> blijkbaar af als tekst en niet als tekst met tags.

Kijk eens naar dit soort constructies:
XML:
1
2
3
4
5
<xsl:template match="@*|*|text()|processing-instruction()">
  <xsl:copy>
    <xsl:apply-templates select="@*|*|text()|processing-instruction()"/>
  </xsl:copy>
</xsl:template>

Dit compieert alle stukken xml (dus ook jouw <a> tags in je voorbeeld) naar de uitvoer; tenminste als er geen andere template voor gedefinieerd is.

Acties:
  • 0 Henk 'm!

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 19-09 12:45
Sendy schreef op 05 januari 2004 @ 16:58:
Een tag is een tag is een tag. XML maakt geen verschil. Het enige waarop je moet letten bij het includen van html in een xml bestand is dat de tags allemaal afgesloten moeten zijn. Daarom kom je dus snel uit op XHTML (waarin die eis van afgesloten tags is opgenomen.)

Ik denk nog steeds dat je 'fout' ergens anders zit. Je handelt de tekst in <content> blijkbaar af als tekst en niet als tekst met tags.

Kijk eens naar dit soort constructies:
XML:
1
2
3
4
5
<xsl:template match="@*|*|text()|processing-instruction()">
  <xsl:copy>
    <xsl:apply-templates select="@*|*|text()|processing-instruction()"/>
  </xsl:copy>
</xsl:template>

Dit compieert alle stukken xml (dus ook jouw <a> tags in je voorbeeld) naar de uitvoer; tenminste als er geen andere template voor gedefinieerd is.
Als ik zo'n copy statement gebruik gebeurd er ook niet wat ik wil. Ook dan is er geen html te zien.
Ik ben er inmiddels wel achter dat de html tags als xml worden gezien. Zie het volgende stukje:
code:
1
2
3
4
5
6
7
8
<ezdev>
<login>1</login>
<username>gomaster</username>
<titel>blaat</titel>
  <pagina>
    <b>hoi</b>
  </pagina>
</ezdev>

Dit zag ik toen ik de variabele xml die normaal met de xsl gedaan wordt echo'de. Nadat ik natuurlijk de headers had aangepast.
Ik hoop dat iemand nog iets weet. Ik moet denk ik ook maar eens een boek gaan lezen over xml want het is toch iets ingewikkelder dan ik dacht.

Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Nou, als je er echt niet uitkomt geef dan eens je initiele XML file en je XSL stylesheet (XSLT) in z'n geheel (liefst een beetje gestript zodat het probleem zich wel voordoet maar we niet onnodig veel zooi zien). Je verhaal is een beetje _te_ onduidelijk.

Acties:
  • 0 Henk 'm!

  • drm
  • Registratie: Februari 2001
  • Laatst online: 09-06 13:31

drm

f0pc0dert

* drm heeft een flauw vermoeden dat het aan een br- of img-element ligt...

Music is the pleasure the human mind experiences from counting without being aware that it is counting
~ Gottfried Leibniz


Acties:
  • 0 Henk 'm!

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 19-09 12:45
Dan komt hier alsnog mijn code
xslt stylesheet:
code:
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
<?xml version="1.0" encoding="ISO-8859-1"?>

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

<xsl:template match="/">
<html>
<head>
<title><xsl:value-of select="ezdev/titel"/></title>
</head>
<body>
<table border='1' style="width: 100%; height: 600px;">
<xsl:if test="ezdev/login = 1">
    <tr><td>menu voor ingelogde user</td></tr>
</xsl:if>
<xsl:if test="ezdev/login = 0">
    <tr><td align='left'>menu voor uitgelogde user</td></tr>
</xsl:if>
<tr><td>
<xsl:value-of select="ezdev/pagina"/> <!-- de pagina -->
</td></tr>
</table>
</body>
</html>
</xsl:template>
</xsl:stylesheet>

Het stukje xml wat normaal dynamisch wordt gemaakt maar nu even statisch:
code:
1
2
3
4
5
6
7
<?xml version="1.0" encoding="ISO-8859-1"?>
<ezdev>
    <login>1</login>
    <username>username</username>
    <titel>paginatitel</titel>
    <pagina>pagina inhoud</pagina>
</ezdev>

En de php om het bij elkaar te voegen:
PHP:
1
2
3
4
5
6
7
8
9
10
$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);

php is gejat. Dit is even op een andere server omdat op mijn eigen de functies van php niet werken. Ik gebruik hiervoor een extensie die alleen kan samenvoegen. DIe geeft echter geen errors dus ik weet niet wat er is vandaar dat ik het even zo test.

Ik hoop dat het wat duidelijker is geworden zo.

Acties:
  • 0 Henk 'm!

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
en wat werkt er dan nou niet?

(hier werkt het gewoon)

output:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <title>paginatitel</title>
  </head>
  <body>
    <table border="1" style="width: 100%; height: 600px;">
      <tr>
        <td>menu voor ingelogde user</td>
      </tr>
      <tr>
        <td>pagina inhoud</td>
      </tr>
    </table>
  </body>
</html>


wel ff <xsl:output indent="yes"/> toegevoegd

en als je xhtml in je pagina wilt stoppen moet je doen:

code:
1
<xsl:copy-of select="ezdev/pagina"/>

[ Voor 143% gewijzigd door Genoil op 05-01-2004 22:29 ]


Acties:
  • 0 Henk 'm!

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 02:21

Janoz

Moderator Devschuur®

!litemod

@gomaster
Juist het belangrijke punt heb je in je samenvatting weg gelaten. Wat is exact de inhoud van de (dynamisch gegenereerde) pagina? Denk hierbij vooral ook aan de door php toegevoegde tags door nl2br of hidden sessionid's.

* Janoz sluit zich bij drm's niet xhtml vermoeden aan, en vult deze aan met input. ;)

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


Acties:
  • 0 Henk 'm!

  • Sendy
  • Registratie: September 2001
  • Niet online
Natuurlijk is dat het. Misschien moet je eens naar HTML Tidy kijken, dat kan ook missende sluittags in html (voor inclusie in XML) aanvullen. (Tenminste als het geen andere *tidy is die ik bedoel.)

Acties:
  • 0 Henk 'm!

  • gomaster
  • Registratie: Februari 2002
  • Laatst online: 19-09 12:45
Genoil schreef op 05 januari 2004 @ 22:24:

wel ff <xsl:output indent="yes"/> toegevoegd

en als je xhtml in je pagina wilt stoppen moet je doen:

code:
1
<xsl:copy-of select="ezdev/pagina"/>
Dat was het. Nu lukt ie wel gewoon.
Janoz schreef op 05 januari 2004 @ 22:31:
@gomaster
Juist het belangrijke punt heb je in je samenvatting weg gelaten. Wat is exact de inhoud van de (dynamisch gegenereerde) pagina? Denk hierbij vooral ook aan de door php toegevoegde tags door nl2br of hidden sessionid's.

* Janoz sluit zich bij drm's niet xhtml vermoeden aan, en vult deze aan met input. ;)
De inhoud was xhtml. Alles met sluittags ook de img.

Maar dit kleine ding heeft geholpen. Allemaal heel erg bedankt _/-\o_
Pagina: 1