Toon posts:

[XSL] url toepassen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Beste Tweakers (Met name MBravenboer en Freak007)

Ik zit wederom met een vraagje!

Ik heb een stukje XML document:
code:
1
2
3
4
<Verenigingen>
  <VER_Naam>SV Students</VER_Naam>
  <VER_URL>www.svstudents.nl</VER_URL>
</Verenigingen>

En het volgende XSL document:
code:
1
2
3
4
5
<label name="VER_Name" type="text" maxlength="50">
  <A HREF="www.test.nl" target="new">
    <xsl:value-of select="//VER_Name" />
  </A>
</label>

nou wil ik dat de link (url) d.m.v. XSL in de output (HTML) wordt gedaan, dus dat het niet hard in de code staat. Dus dat www.test.nl vervangen wordt door middel van een stukje XSL dat www.svstudents.nl uit het XML document haalt

Kan iemand me hierbij helpen?

Alvast bedankt

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
drms: nou wil ik dat de link (url) d.m.v. XSL in de output (HTML) wordt gedaan, dus dat het niet hard in de code staat.
Dat kan op dezelfde manier als waarop je de andere value-of gebruikt. Het punt is echter dat je in dit geval de waarde in een attribuut moet hebben. Je kan nu de XPath expressie opnemen in de attribuut en opnemen in { ... } of je kan een subelement xsl:attribute gebruiken.

De eerste oplossing vind ik personelijk het duidelijkst, dus.
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
<xsl:template match="pml:link">
   <a href="{@url}">
     <xsl:choose>
         <xsl:when test="string-length(.) = 0">
           <xsl:value-of select="@url"/>
         </xsl:when>

         <xsl:otherwise>
           <xsl:value-of select="."/>
         </xsl:otherwise>
     </xsl:choose>
   </a>
</xsl:template>

Dit is een iets ander stukje code, wat mathed op <link url="bla"/> of <link url="bla">boeh</link>, maar je ziet wel het attribuut url tussen { ... } staan (de choose heeft niets met jouw vraag te maken).

In jouw geval dus: href="{//VER_URL}" (hangt uiteraard van je template match af. Overigens is die //VER_NAME ook wel wat twijfelachtig een stylesheet voor vereningen. Wat is je de current node in je template?
Alvast bedankt
Graag gedaan ;) .

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


Verwijderd

Topicstarter
Sorry, ik kom er niet uit, en misschien heb ik het ook wel niet goed uitgelegd.

Ik wil dus dat de VER_Name (SV Students) tevoorschijn komt op het scherm, en ik wil dat daarachter de link (www.svstudents.nl) komt.

Heeft dat misschien invloed op je eerder reactie??

  • mbravenboer
  • Registratie: Januari 2000
  • Laatst online: 06-11-2025
Dat had ik inderdaad begrepen...

conretere code:
code:
1
2
3
4
5
<label name="VER_Name" type="text" maxlength="50">
  <a href="{//VER_URL}" target="new">
    <xsl:value-of select="//VER_Name" />
  </a>
</label>

Als je een waarde in een attribuut wilt gebruiken, moet je kiezen:
1. Neem de expressie op tussen { ... } in het attribuut zelf
2. Gebruik het xsl:attribute element.

In dit voorbeeld heb ik oplossing 1 gekozen, wellicht dat die wat verwarrend is.

Tweede voorbeeld (hoop dat het goed staat, gebruik deze constructie niet vaak):
code:
1
2
3
4
5
6
7
8
9
<label name="VER_Name" type="text" maxlength="50">
  <a target="new">
    <xsl:attribute name="href">
       <xsl:value-of select="//VER_URL" />  
    </xsl:attribute>

    <xsl:value-of select="//VER_Name" />
  </a>
</label>

In voorbeeld 1 kan je dus de expressie die normaal in de select van een value-of staat (XPath dus) opnemen tussen { ... } . Hiermee geef je aan dat deze waarde geevalueerd moet worden.

Zo duidelijker? :)

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