[XSL] apply-templates op een attribuut

Pagina: 1
Acties:

  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 15-09 23:45
Is het mogelijk om <xsl:apply-templates /> te gebruiken op een attribuut?

Omdat bovenstaande vraag misschien een beetje wazig is, zal ik effe wat verduidelijken.
De inhoud van een element, kan je met <xsl:apply-templates /> keurig laten parsen, zodat je er bijvoorbeeld ook dingen als <bold>..</bold> in kan zetten:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
XML:
<text>
    Hier staat een <bold>vetgedrukt</bold> stuk tekst
</text>

XSL:
<xsl:template matxh="text">
    <xsl:apply-templates />
</xsl:template>

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

Maar wat nu als ik dat met text die als attribuut wordt meegegeven wil doen? Voorbeeld:
code:
1
2
3
4
XML:
<text title="Dit is een <bold>dikgedrukte</bold> titel">
    Hier staat een <bold>vetgedrukt</bold> stuk tekst
</text>

Hoe moet ik dan de XSL maken, zodat het titel stuk ook bold wordt?

  • marcusk
  • Registratie: Februari 2001
  • Laatst online: 26-09-2023
de xml-manier is om zoiets te doen:
code:
1
2
3
4
<text>
    <title>Dit is een <bold>dikgedrukte</bold> titel</title>
    <body>Hier staat een <bold>vetgedrukt</bold> stuk tekst</body>
</text>

ik denk niet dat het kan zoals jij wilt.

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Kan ik ook kort over zijn: kan niet (gelukkig maar, anders krijgen we nog meer mogelijkheden om hetzelfde op te schrijven :) )

XML attributen mogen natuurlijk uberhaupt geen XML subelementen bevatten. Je kan er dan dus ook niet op matchen.

Je kan ook niet op je resultaat gaan matchen (daar zou je eventueel nog aan kunnen denken) omdat alle resultaten bij XSL gelijk definitief zijn. Je zou het extreem ranzig twee keer kunnen stylen, maar subelementen zoals marcusk al zei zijn in feite de enige goede oplossing.

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


  • 3volution
  • Registratie: September 2001
  • Niet online

3volution

tsja...

Ik had hier nog een documentje over. Ene Adam had hetzelfde probleem:
------------------------

My problem was that I wanted to be able to embed HTML tags into an XML file.
Every time I attempted to do this, one of two things would happen:

1. The HTML tags would be read as XML, and therfore be ignored by the
time I wanted to use the tag in the stylesheet.
2. The HTML tags would be converted to something like < or something
like that, which would not work as HTML tags anymore. (This happened when I
used a CData tag in the xml.)

Here is the way you can do it. You should be able to use either normal
text, or HTML "rich" text with boldings, italics and whatever else you want.
Here is an example:

XML:

<?xml version="1.0"?>
<TEXT><![CDATA[Hello<B>There</B>]]>
</TEXT>

XSL:
<?xml version="1.0"?>
<!-- Generic stylesheet for viewing XML -->
<xsl:template xmlns:xsl="http://www.w3.org/TR/WD-xsl">

<xsl:cdata><![CDATA[>]]>
<xsl:value-of select="TEXT"/>
<![CDATA[<!--]]></xsl:cdata>
</xsl:template>


The resulting HTML will be this:

<![CDATA[>
Hello<B>There</B>
<!--]]>


If you will notice, this is basically HTML with two extra tags in it. The
last tag is a comment, and so it is ignored. The first tag is <![CDATA[>,
which is not a valid HTML tag, and the way I understand HTML and browsers,
any unrecognized tag will be ignored. This works out great for me. Now I
can put simple tags like bold and underline and whatever into my XML without
having to come up with special XML versions of every HTML tag ever invented.
------------------------------

Verwijderd

code:
1
2
3
<xsl:template match="element[@attribute='value']">
<!-- bla -->
</xsl:template>

Of bedoel je dit niet?

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Otis: Of bedoel je dit niet?
Nee, hij wil op XML content in een attribuut matchen.... Maar omdat een attribuut geen XML content kan bevatten is dat nogal lastig ;)

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


  • Rense Klinkenberg
  • Registratie: November 2000
  • Laatst online: 15-09 23:45
Jammer. Moeten we waarschijnlijk achteraf een groot deel van de code herscrijven :(

Maar ja, dat gebeurt als je DTD's moet schrijven, terwijl je net een week weet wat XML is en je nog totaal niet weet wat XSLT is :)
Pagina: 1