Web-TorMedlem sedan nov. 200013 890 inlägg Jag har en SVG-fil som innehåller bl.a. det här:
<text xml:lang="se">Hej</text>
<text xml:lang="en">Hello</text>
Nu vill jag ha ut bara den svenska texten så jag läger jag på ett XSLT-stylesheet som bl.a. innehåller det här:
<!-- Start of transformation -->
<!-- ======================= -->
<xsl:template match="/">
<html>
<head><title>NULL</title>
</head>
<body>
<xsl:if test="text[@xml:lang='se']">
<xsl:call-template name="se"/>
</xsl:if>
<hr/>
<div>
<p><em>Slut på dokumentet</em></p>
</div>
</body>
</html>
</xsl:template>
<!-- Block-level elements transformation -->
<!-- =================================== -->
<xsl:template name="se">
<p><xsl:apply-templates/></p>
</xsl:template>
</xsl:stylesheet>
Men det händer ingenting. HTML-filen som jag får ut innehåller bara det här:
<html xmlns="http://www.w3.org/TR/REC-html40" xmlns:svg="http://www.w3.org/2000/svg">
<head><title>NULL</title>
</head>
<body>
<hr/>
<div>
<p><em>Slut på dokumentet</em></p>
</div>
</body>
</html>
…hjälp :l
jarvkloMedlem sedan juli 20013 378 inlägg Skulle
<xsl:template match="/svg">
<html>
<head><title>NULL</title>
</head>
<body>
<xsl:apply-templates select="text[@xml:lang='se']"/>
<hr/>
<div>
<p><em>Slut pa dokumentet</em></p>
</div>
</body>
</html>
</xsl:template>
<xsl:template name="text" >
<p><xsl:value-of select="." /></p>
</xsl:template>
funka för det du vill göra? - eller är det krav på att du skall använda just <xsl:if> och <xsl:call-template > ?
Web-TorMedlem sedan nov. 200013 890 inlägg Med din kod får jag bara ut texten Hej Hello. Ingen html-kod ens :q
Det är inget krav att använda if eller call-template. Jag vill bara låta bli att skriva ut där xml:lang är satt till 'en'. :x
jarvkloMedlem sedan juli 20013 378 inlägg
Med din kod får jag bara ut texten Hej Hello.
Hmm... Ojdå - då har du problem med att "huvud-regeln" inte lyckas matcha mot rot-elementet i din SVG-fil!
Jag gissade mig till att ditt dokument såg ut nånting i stil med
<svg>
<text xml:lang="se">Hej</text>
<text xml:lang="en">Hello</text>
</svg>
- och skrev min mall för att matcha det antagandet (och med *det* porovdatat funkar mallen i XMLCooktop med MSXML3 sp2 ;)
Kan du bifoga en delmängd av din SVG-fil som är komplett med rotelement m.m.?
Web-TorMedlem sedan nov. 200013 890 inlägg Jag är ganska ny på XML/XSLT så jag är tacksam för all hjälp jag kan få.
Jag du lösa detta åt mig så blir jag överlycklig:
Från SVG filen (som innehåller orden "hej" och "hello") ska endast "hej" skrivas ut.
Här är mina filer.
jarvkloMedlem sedan juli 20013 378 inlägg Hmmm...
Intrikat på min ära ;)
Det du verkar ha snubblat över vad som krävs för att använda multipla namespaces i xslt-mallar !
Det som verkar vara ditt problem är:
- Du deklarerar din svg-fil till att tillhöra ett visst xml-namespace
(ur din SVG-fil:
<svg ... xmlns="http://www.w3.org/2000/svg">
) - Detta kommer du antagligen inte undan (har inte kollat in SVG-specen i detalj, men misstänker att du *måste* ha xmlns="..." i <svg> på det sättet om du vill uppfylla standarden "strikt" ;) )
- samtidigt deklarerar du att det namespacet skall bindas till prefixet "svg" i XSLT-filen
( ur din XSLT-fil:
<xsl:stylesheet ... xmlns:svg="http://www.w3.org/2000/svg" ...>
)
Tillsammans verkar dessa deklarationer medföra att alla svg-taggar du vill hämta information ur i din XSLT-mall måste skrivas med "svg:" som prefix i mallen! (t.ex. svg som svg:svg, text som svg:text osv)
Gör man så, så löser det iaf problemet
<?xml version="1.0" standalone="no"?>
<xsl:stylesheet
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:svg="http://www.w3.org/2000/svg"
version="1.0"
>
<xsl:output method="html"/>
<xsl:template match="/svg:svg">
<html>
<head><title>NULL</title>
</head>
<body>
<xsl:apply-templates select="svg:text[@xml:lang='se']"/>
<hr/>
<div>
<p><em>Slut pa dokumentet</em></p>
</div>
</body>
</html>
</xsl:template>
<xsl:template name="svg:text" >
<p><xsl:value-of select="." /></p>
</xsl:template>
</xsl:stylesheet>
Om du orkar sätta dig in i alla detaljer i ämnet, så finns XML Namespaces på http://www.w3.org/TR/1999/REC-xml-names-19990114/ - fast den är ganska svårsmält :bire