XML: CDATA en <!-- tags

Pagina: 1
Acties:

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Ik heb wat lappen oude HTML code die ik weer wil geven vanuit een XML document. Ik had steeds problemen met het renderen van de XML door XSLT bij een bepaald stuk HTML code. Na wat proberen kwam ik er achter dat het weer werkte door een <!-- weg te halen die ergens in een javascript zat.

Kan ik hier nog iets aan doen of moet ik iedere keer dit soort XML bestanden doorziften en <!-- tags handmatig verwijderen?

iOS developer


Verwijderd

Helpt het niet om er <![CDATA[ ... ]]> omheen te zetten? Ik snap trouwens niet waarom de XSL processor moeite zou hebben met <!--. Als het nou een for(var i=0; i< ...) was :?

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Als ik die tags er niet omheen zou zetten zou het ook geen CDATA zijn ;)

iOS developer


Verwijderd

<!-- --> in xml is gewoon commentaar, dus gaat je js niet werken

aangezien in js < en > kunnen voorkomen moet er eigenlijk inderdaad <![CDATA[..]]> omheen

Dit gaat vervolgens weer niet werken in html (lees: text/html) omdat <![CDATA[ niet gezien wordt als javascript dus moet je het wegcommenten

HTML:
1
2
3
4
5
<script type="text/javascript">
  //<![CDATA[
    /* the script goes here */
  //]]>
</script>


als je dit vervolgens ook nog wilt laten werken in compleet antieke browsers (waar je comment nodig was) dan wordt het helemaal een feest:

HTML:
1
2
3
4
5
<script type="text/javascript">
  <!--//--><![CDATA[//><!--
    /* the script goes here */
  //--><!]]>
</script>

[ Voor 35% gewijzigd door Verwijderd op 24-06-2005 13:05 ]


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Het probleem komt er eigenlijk op neer dat ik er tot nu toe van uit ging dat je alle 'rotzooi' in een CDATA veld kon zetten, totdat de parser ]]> tegen komt of bepaalde andere niet XML-standaard tekens (die er zeker niet in zaten).

Nu blijkt hij echter te breken bij het parsen als er een <!-- tag in staat, bijvoorbeeld in een comment in een JavaScript. Ik kan dat niet voorkomen omdat het redelijk vaak gebruikt werd/wordt, zeker als het nog om oude HTML gaat. Is dit te voorkomen door een aanpassing in de XSL-file?

Even voor de volledigheid de XSL file er bij:

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?xml version="1.0" encoding="us-ascii"?>
<xsl:stylesheet version='1.0' 
                xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
>
<xsl:output method="html" indent="yes" encoding="us-ascii"/>

<xsl:template match="/">
<xsl:apply-templates />
</xsl:template>

<xsl:template match="query" >
<div>
<xsl:attribute name="id"><xsl:number /></xsl:attribute>
<xsl:attribute name="class">resultBox</xsl:attribute>
<xsl:attribute name="onMouseOver">highlightOn(this)</xsl:attribute>
<xsl:attribute name="onMouseOut">highlightOff(this)</xsl:attribute>
<xsl:attribute name="onClick">showInfo(this)</xsl:attribute>
<div>
<xsl:attribute name="class">title</xsl:attribute>
<xsl:value-of select="Titel" />
</div>
Omschrijving: <xsl:value-of select="Omschrijving" />
<br />
<div>
<xsl:attribute name="class">hiddenInfo</xsl:attribute>
<xsl:value-of select="datum" />
<xsl:value-of select="Inhoud" disable-output-escaping="yes" />
<xsl:if test="maillink != ''">
<br />
<a>
<xsl:attribute name="href">
<xsl:value-of select="maillink"/>
</xsl:attribute>
Notes E-mail
</a>
</xsl:if>
<xsl:if test="doclink != ''">
<br />
<a>
<xsl:attribute name="href">
<xsl:value-of select="doclink"/>
</xsl:attribute>
Document
</a>
</xsl:if>
</div>
<span>

</span>
</div>
<br />

</xsl:template>

<xsl:template match="text()" />

</xsl:stylesheet>

iOS developer


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Nu blijkt hij echter te breken bij het parsen als er een <!-- tag in staat, bijvoorbeeld in een comment in een JavaScript
<!-- is geen commentaar in JS hoor :?

edit:

Mmmm, blijkbaar wel op dezelfde regel :+

[ Voor 20% gewijzigd door BtM909 op 24-06-2005 13:21 ]

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

niet in js, wel in xml (ook binnen het script element)

wat je tussen <!-- en --> staat komt dus niet eens in de js parser terecht
wat tussen /* en */ staat komt wel in de js parser terecht, maar die ziet het vervolgens weer als commentaar

@TS: hoe ziet de xml er dan uit (relevante js stuk)? want <!-- binnen <![CDATA[ is natuurlijk geen comment

[ Voor 20% gewijzigd door Verwijderd op 24-06-2005 13:22 ]


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

Verwijderd schreef op vrijdag 24 juni 2005 @ 13:20:
niet in js, wel in xml (ook binnen het script element)

wat je tussen <!-- en --> staat komt dus niet eens in de js parser terecht
wat tussen /* en */ staat komt wel in de js parser terecht, maar die ziet het vervolgens weer als commentaar
Klopt helemaal, maar dat komt wellicht omdat ik het al een tijdje niet meer gebruik in JS blokken :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.


Verwijderd

Dan is de enige mogelijke oplossing die ik zie een global search & replace:
• <!-- naar <xsl:comment>
• --> naar </xsl:comment>

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<Omschrijvingen><![CDATA[<script language="JavaScript"><!--
function Window_New() {
  px = 600
  py = 500

  sx = (screen.width - px) / 2;
  sy = (screen.height -py) / 2;
  newWindow = window.open('../xtr_html/omrekenkoersen.html','popup','width='+px+',height='+py+',top='+sy+',left='+sx+'');
}

</script>

<A HREF='#' onClick='Window_New()'>Voorbeeld koersberekening</A><BR>
<BR>]]></Omschrijvingen>


Vervangen is niet zo handig om steeds te doen.....

iOS developer


Verwijderd

en wat is vervolgens hier je procedure mee? met xsl combineren tot html (op server) en dan verzenden? dan zie ik niet veel problemen eigenlijk, als je het combineert tot xhtml (op de server of op de client) dan krijg je idd het probleem wat ik noemde dat je js niet werkt (het zal wel in in je source gezet worden, tenminste, da's de bedoeling).

Overigens mist er wel een --> voor je </script>

overigens moet die cdata pas na je <script> tag en voor je </script> tag weer afgesloten worden, want dat element en de elementen erna zijn wel pcdata

en maak van je language = "javascript" eens type="text/javascript"

overigens gaan die hoofdletters in je source ook niet werken in een xhtml omgeving

eigenlijk is het zo'n rommeltje dat ik me afvraag of je je niet een beetje meer moet verdiepen in xml, xhtml en xslt. Of dit moet natuurlijk allemaal op de server gecorrigeerd worden.

[ Voor 55% gewijzigd door Verwijderd op 24-06-2005 14:51 ]


  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Ik heb geen controle over de rotzooi die in die oude HTML code die tussen de CDATA tags staat. Dat is mijn code niet, maar ik moet het wel laten zien. Anders hoefde ik deze vraag hier uberhaupt niet te stellen waarschijnlijk ;)

Het is een directe XML export uit een Access database met gegevens van een kennisdatabase, en omdat er nou eenmaal geen mogelijkheid is tot het herschrijven van alle gegevens moet ik het doen met wat ik heb. Ik zou natuurlijk ook een scriptje kunnen schrijven binnen Access die alle rotzooi er uit haalt en het naar een file print die wat leuker in elkaar zit dan de standaard MS-XML, maar als er een tag is die problemen geeft binnen een CDATA veld, kan een andere ook weer problemen geven, lijkt me.

iOS developer


Verwijderd

in dat geval zou ik het echt op de server door een opschoonprocedure halen, da's toch wel te doen? want als je deze xml op de client wilt afhandelen blijf je problemen houden denk ik

  • BikkelZ
  • Registratie: Januari 2000
  • Laatst online: 28-03 23:19
Er is geen server....anders had ik het heel wat makkelijker zonder XML op kunnen lossen met PHP / MySQL bijvoorbeeld. Dit draait op platte files.

iOS developer


  • BtM909
  • Registratie: Juni 2000
  • Niet online

BtM909

Watch out Guys...

BikkelZ schreef op vrijdag 24 juni 2005 @ 15:56:
Er is geen server....anders had ik het heel wat makkelijker zonder XML op kunnen lossen met PHP / MySQL bijvoorbeeld. Dit draait op platte files.
Dan is het toch helemaal makkelijk? Eenmalig aanpassen :)

Ace of Base vs Charli XCX - All That She Boom Claps (RMT) | Clean Bandit vs Galantis - I'd Rather Be You (RMT)
You've moved up on my notch-list. You have 1 notch
I have a black belt in Kung Flu.

Pagina: 1