Avatar billede ronni-drengen Nybegynder
12. oktober 2002 - 15:43 Der er 7 kommentarer og
1 løsning

Problem med CDATA

Hej,

Udviklingsmiljø: Java med Xalan og Xerces.

Jeg har et problem med et indhold imellem to 'message' tags som ikke skal parses. Se nedenstående beskrivelse.

1. Jeg har et xsl stylesheet og et xml dokument som jeg transformere til et nyt xml dokument. Dette gøres for at sammensætte parametre angivet i xml format med en 'email-template' angivet i xsl.

2. Det nye xml dokument indeholder elementer til en email. se eksempel herunder:

<?xml version="1.0" encoding="ISO-8859-1"?>
<email>
  <mime-type>text/html</mime-type>
  <subject>This is subject</subject>
  <message>
    <html>
      <h1>Hallo, Hans Larsen</h1>

Blot noget tekst.
</html>
  </message>
</email>

3. Herefter skal jeg parse mit nye xml dokument, resultatet fra punkt 1. Men indeholdet i message-tag'set skal ikke parses. Dette kan klares med at tilføje <![CDATA[ ... ]]> omkring indholdet i message-tag'set. Men udgangspunktet er følgende xsl og xml.

XML:
<?xml version="1.0" encoding="ISO-8859-1"?>
<myname>
    <forname>Hans</forname>
    <surname>Larsen</surname>
</myname>

og XSL:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:xalan="http://xml.apache.org/xslt">
<xsl:output method="xml" encoding="ISO-8859-1" indent="yes" xalan:indent-amount="2"/>
<xsl:template match="/">
<email>
<mime-type>text/html</mime-type>
<subject>Dette er subject på email</subject> 
<message>
<html>
<h1>Hallo, <xsl:value-of select="myname/forname"/><xsl:text> </xsl:text><xsl:value-of select="myname/surname"/></h1>

Blot noget tekst.
</html>
</message>
</email>
</xsl:template>
</xsl:stylesheet>

og hvis jeg indsætter en CDATA ved message tag'set i xsl'en ignoreres alt imellem message tag'sene i transformationen.

Er der nogen som har en løsning på dette problem ?
Avatar billede Slettet bruger
13. oktober 2002 - 22:20 #1
Er det det her output du efterlyser, eller er det mere tricky?

<message><![CDATA[
<html>
<h1>Hallo, ]]><xsl:value-of select="myname/forname"/><xsl:text> </xsl:text><xsl:value-of select="myname/surname"/><![CDATA[</h1>

Blot noget tekst.
</html>
]]></message>


/CS
Avatar billede ronni-drengen Nybegynder
14. oktober 2002 - 09:47 #2
Hej Greystate

Det jeg ønsker er at alt i message tag'set ikke bliver parset, fordi indholdet skal bruges som en html email.

Så jeg kunne f.eks. ønske mig dette efter transformeringen:

<message><![CDATA[
    <html>
      <h1>Hallo, Hans Larsen</h1>

Blot noget tekst.
</html>
]]></message>

Hvis jeg sætter mit CDATA tag i xsl'en bliver tag'sene i message tag'set ikke behandlet i transformeringen og det ønsker jeg de skal.

-RL
Avatar billede Slettet bruger
14. oktober 2002 - 11:50 #3
Ja - okay, har du prøvet med "cdata-section-elements" attributten i <xsl:output /> ?

(<xsl:output cdata-section-elements="message" />

/CS
Avatar billede ronni-drengen Nybegynder
14. oktober 2002 - 11:55 #4
Ja - jeg har prøvet det, men ser ikke ud til at have nogen effekt?

-RL
Avatar billede ronni-drengen Nybegynder
14. oktober 2002 - 17:09 #5
Umiddelbart ser det ud til <xsl:output cdata-section-elements="message" /> skulle virke, men intet i output'et blive wrappet i <![CDATA[ ... ]]>.

Jeg bruger Xalan til tranformeringen.

Andre som har været ude for dette ???
Avatar billede Slettet bruger
14. oktober 2002 - 20:59 #6
Hej igen,

Prøv lige at se hvad der sker når du siger:

  cdata-section-elements="h1 html"

- den virker kun på text() nodes (...og det står der jo også i specifikationen... silly me)

/CS
Avatar billede ronni-drengen Nybegynder
16. oktober 2002 - 13:40 #7
Hej GreyState

Ja, det ser ikke ud til at der er en god (generisk) løsning til mit problem. Har dog lavet en workaround, og så er der point til dig.

-RL
Avatar billede Slettet bruger
16. oktober 2002 - 20:45 #8
Der takkes og bukkes og skrabes :-)

/CS
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester