Toon posts:

[xsl] item met namespace matchen

Pagina: 1
Acties:

Verwijderd

Topicstarter
Ik ben voor een xml document waarin plugins stukken van de inhoud bepalen een xsl aan het maken.

code:
1
2
3
4
5
6
7
<item id="77" name="Tekst">
  <plugin xmlns="Text">
    <text id="37" header="Diensten">
      <![CDATA[Tekstje]]> 
    </text>
  </plugin>
</item>


Elke plugin heeft een aparte xsl die een match maakt.

code:
1
2
3
4
5
6
<xsl:template match="Text:plugin/text">
  <xsl:if test="@header">
    <strong><xsl:value-of select="@header" disable-output-escaping="yes"/></strong><br/>
  </xsl:if>
  <xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>


Nu werkt, deze code zonder namespace toevoeging goed. Als de namespace echter wel erin staat matcht de template niet meer.

Iemand enig idee wat voor match gemaakt moet worden?

  • Genoil
  • Registratie: Maart 2000
  • Laatst online: 12-11-2023
Als ik me niet vergis maak je verkeerd gebruik van je xmlns. Volgens mij zou dat zoiets moeten zijn:

code:
1
2
3
4
5
6
7
<item id="77" name="Tekst">
  <Text:plugin xmlns="http://www.tice.com/Text">
    <text id="37" header="Diensten">
      <![CDATA[Tekstje]]> 
    </text>
  </Text:plugin>
</item>


nu zeg je dus dat je plugin tag onderdeel is van de namespace "Text", die dan officieel gedefineerd staat op de URL die in je xmlns staat. Maar op die URL hoeft verder niks te staan hoor. Namespaces zijn er met name voor bedoeld om naamgevinbgsconflicten te voorkomen.

(het zou ook kunnen dat je text tag ook onderdeel is van de Text namespace)

Verwijderd

Topicstarter
Deze aanpak heb ik geprobeerd:

code:
1
2
3
4
<TextPlugin:plugin xmlns:TextPlugin="http://www.tice.com/xml/plugin/TextPlugin">
  <text id="35">
  <![CDATA[blaat]]> 
</text>


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:p="http://www.tice.com/xml/plugin/TextPlugin"
>
    
<xsl:template match="p:plugin/text">
  <xsl:if test="@header">
    <strong><xsl:value-of select="@header" disable-output-escaping="yes"/></strong><br/>
  </xsl:if>
  <xsl:value-of select="." disable-output-escaping="yes"/>
</xsl:template>

</xsl:stylesheet>


Maar ook hier matcht de xsl niet....

Verwijderd

Sorry dat ik zo'n oud topic schop. maar het voldoet 100% aan het probleem wat ik heb. Ik heb de suggesties die ik elders gevonden heb en de opties in dit topic geprobeerd, maar ook hier werkt de match alleen zonder de namespace :{

In de post hierboven lijkt alles er goed uit te zien imo, of vergis ik me nu?

  • Rickets
  • Registratie: Augustus 2001
  • Niet online

Rickets

Finger and a shift

Zonder code blijft het gokken, maar dit werkt toch wel bij mij :)
XML:
1
2
3
4
<?xml version="1.0" ?>
<namespace:element xmlns:namespace="http://www.url.com">
  <text>Hoi</text>
</namespace:element>

code:
1
2
3
4
5
6
7
8
9
10
<?xml version="1.0" ?>
<xsl:stylesheet
    version="1.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:namespace="http://www.url.com">
    
  <xsl:template match="namespace:element">
    <xsl:value-of select="text" />
  </xsl:template>
</xsl:stylesheet>

If some cunt can fuck something up, that cunt will pick the worst possible time to fucking fuck it up, because that cunt’s a cunt.