[xsl] copy-of gaat niet goed

Pagina: 1
Acties:
  • 171 views sinds 30-01-2008
  • Reageer

  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 12:35
Hoi, even een kort vraagje over XSL :).

Ik heb een flinke stylesheet hier liggen maar een simpel probleempje waar ik niet uitkom. Ik heb net een flink aantal topics er nog over opgezocht, maar dat boodt geen soelaas.

Ik gebruik copy-of om inhoud van berichten in mn forum rechtstreeks te kopieren naar javascript functies. Toch gaat dit niet goed. Met select-of krijg ik uiteraard alleen de text vòòr geneste tags, met copy-of krijg ik geen geneste tags en de inhoud daartussen, maar wel weer wat daarna staat.

Hier de simpele code die ik gebruik:
code:
1
2
3
    <xsl:template match="/dorum/content/posts/post">
        post(<xsl:value-of select="@id" />, <xsl:value-of select="@userid" />, <xsl:value-of select="@timestamp" />, '<xsl:copy-of select="text()" />');
    </xsl:template>

Misschien irrelevant, maar deze regeltjes staan bij mij bovenaan:
code:
1
2
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

:)

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Probeer eens dit:
code:
1
<xsl:value-of select=".//text()"/>

Bron: http://aspn.activestate.com/ASPN/Cookbook/XSLT/Recipe/65425

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Je doet een copy of van de text() nodes ... Ik denk niet dat je dat wilt. Deze text nodes hebben nooit structuur maar zijn pure tekst. Het kan zijn dat je sub element 'text' heet, dan moet je ff het () wegzetten die je er per ongelijk hebt neergezet ;) .
ddc: xmlns="http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"
Dit is niet de namespace voor XHTML, maar de URL waar het W3C de DTD van XHTML heeft staan. De goede namespace is http://www.w3.org/1999/xhtml .

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


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 12:35
Gedaan. Met select-of werkt het niet trouwens, dus had er al ff copy-of van gemaakt met jouw voorbeeld.

Dan negeert hij dingen IN de tags niet meer, maar de tags zelf negeert hij alsnog, dus het is nog niet wat ik wil ;)

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Voor de duidelijkheid; dit is volgens mij in alle gevallen hetzelfde:
code:
1
2
3
<xsl:copy-of select="text()"/>
<xsl:value-of select="text()"/>
<xsl:apply-templates select="text()"/>

(uitgaande van een default template voor text())

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


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 12:35
mbravenboer:
Je doet een copy of van de text() nodes ... Ik denk niet dat je dat wilt. Deze text nodes hebben nooit structuur maar zijn pure tekst. Het kan zijn dat je sub element 'text' heet, dan moet je ff het () wegzetten die je er per ongelijk hebt neergezet ;) .
Duh, en deze opmerking van jou hielp me te herrinneren dat ik dan de . moet gebruiken |:( ;)
Dit is niet de namespace voor XHTML, maar de URL waar het W3C de DTD van XHTML heeft staan. De goede namespace is http://www.w3.org/1999/xhtml .
Dankjewel voor de tip, zal dat nog even corrigeren :).

Maargoed, probleem is dus opgelost :o

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
ddc: Duh, en deze opmerking van jou hielp me te herrinneren dat ik dan de . moet gebruiken |:( ;)
Geefnie hoor ;) .

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


  • Dennis
  • Registratie: Februari 2001
  • Laatst online: 12:35
mbravenboer:
Voor de duidelijkheid; dit is volgens mij in alle gevallen hetzelfde:
code:
1
2
3
<xsl:copy-of select="text()"/>
<xsl:value-of select="text()"/>
<xsl:apply-templates select="text()"/>

(uitgaande van een default template voor text())
Zoals ik zei in de openingspost, value-of pakte bij mij alleen gegevens van vòòr de eerste tag binnen de tag, en copy-of pakte ook dingen die nog daarna kwamen :).

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Klopt, daar heeft XSLT 2.0 een oplossing voor:

http://www.w3.org/TR/xslt20/#value-of

Hier beschrijven ze de huidige situatie:
If the separator attribute is absent, then (for backwards compatibility with XSLT 1.0) all items in the input sequence other than the first are ignored.

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

Pagina: 1