Avatar billede obix Nybegynder
24. oktober 2005 - 18:16 Der er 11 kommentarer og
1 løsning

XSL og CDATA?

Hej Eksperter.

Jeg prøver på at oprette et cdata felt i min transformerede xml.

Det gør jeg via et xslt.

<cbc:Note><![CDATA[<xsl:value-of select="/xpath"/>]]></cbc:Note>

Ovenstående giver følgende resultat.

<cbc:Note>&lt;xsl:value-of select="/xpath"/&gt;</cbc:Note>

Det er jo ikke helt det jeg leder efter. Hvordan laver jeg et cdata element ved transformering?
Avatar billede arne_v Ekspert
24. oktober 2005 - 20:36 #1
jeg tror at du skal bruge cdata-section-elements !
Avatar billede arne_v Ekspert
24. oktober 2005 - 20:38 #2
eksempel

XML:

<?xml version="1.0" encoding="iso-8859-1" standalone="yes"?>
<?xml-stylesheet type="text/xsl" href="test.xsl"?>
<liste>
  <element>a</element>
  <element>bb</element>
  <element>ccc</element>
</liste>

do nothing XSL:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="/">
<liste>
<xsl:apply-templates/>
</liste>
</xsl:template>
<xsl:template match="element">
<element>
<xsl:value-of select="."/>
</element>
</xsl:template>
</xsl:stylesheet>

output:

<?xml version="1.0" encoding="UTF-8"?><liste><element>a</element><element>bb</element><element>ccc</element></liste>

den rigtige XSL:

<?xml version="1.0"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output cdata-section-elements="element"/>
<xsl:template match="/">
<liste>
<xsl:apply-templates/>
</liste>
</xsl:template>
<xsl:template match="element">
<element>
<xsl:value-of select="."/>
</element>
</xsl:template>
</xsl:stylesheet>

output:

<?xml version="1.0" encoding="UTF-8"?><liste><element><![CDATA[a]]></element><element><![CDATA[bb]]></element><element><![CDATA[ccc]]></element></liste>
Avatar billede Slettet bruger
24. oktober 2005 - 20:47 #3
Hvis jeg må tilføje noget:

Dette er endnu en af dem der ikke "virker", fordi man glemmer (eller aldrig har fået at vide) at et XSLT Stylesheet i bund og grund er et XML dokument; XSLT processoren ser aldrig CDATA-sections i f.eks. en template, da XML parseren på det tidspunkt allerede har fortolket indholdet som text(), og ikke XML elementer.

/CS
Avatar billede obix Nybegynder
24. oktober 2005 - 23:25 #4
Jeg kan ikke få det til at virke... Arne har du testet det?
Avatar billede arne_v Ekspert
24. oktober 2005 - 23:38 #5
ja

output er ægte output
Avatar billede obix Nybegynder
25. oktober 2005 - 10:09 #6
Nå så er den gal igen Arne. Det virker jo. Får jeg lige et svar ?
Avatar billede obix Nybegynder
25. oktober 2005 - 10:10 #7
og du må undskylde mig spørgsmål til om du havde testet det...
Avatar billede obix Nybegynder
25. oktober 2005 - 10:16 #8
Hmm har lige et spørgsmål mere. Det resultat jeg får ud af min cdata der vil jeg gerne tilføje noget statisk tekst i

<element>
Statisk tekst<xsl:value-of select="."/>
</element>

Men resultatet bliver
<element>
<![CDATA[Statisk tekst]]><![CDATA[a]]>
</element>

Hvordan får jeg det statiske tekst ind i cdata tagget?
Avatar billede arne_v Ekspert
25. oktober 2005 - 10:24 #9
svar
Avatar billede arne_v Ekspert
25. oktober 2005 - 10:26 #10
betydningen er jo strengt taget den samme

men jeg kan godt se det kosmetiske

umiddelbart er jeg på bar bund
Avatar billede arne_v Ekspert
25. oktober 2005 - 11:23 #11
<element>
<xsl:value-of select="concat('Statisk tekst',.)"/>
</element>

ser ud til at virke !
Avatar billede obix Nybegynder
25. oktober 2005 - 11:29 #12
Og det gør det =) tak!
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