---
title: "Svg -> Xslt -> Html"
type: "forum-thread"
url: "https://www.webforum.nu/amne/xml/42793-svg-xslt-html"
topic: "XML"
topic_url: "https://www.webforum.nu/amne/xml"
author: "Web-Tor"
published: "2002-04-30T07:52:36.000Z"
updated: "2002-05-01T15:49:56.000Z"
replies: 5
views: 523
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/xml/42793-svg-xslt-html"
---

# Svg -> Xslt -> Html

## #1 — Web-Tor, 2002-04-30T07:52Z

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

Permalänk: https://www.webforum.nu/p/42793

## #2 — jarvklo, 2002-04-30T15:59Z

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 \> ?

Permalänk: https://www.webforum.nu/p/663381

## #3 — Web-Tor, 2002-04-30T16:14Z

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

Permalänk: https://www.webforum.nu/p/663389

## #4 — jarvklo, 2002-04-30T18:26Z

> 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.?

Permalänk: https://www.webforum.nu/p/663464

## #5 — Web-Tor, 2002-05-01T13:09Z

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.

Bilagor:

- [filer.zip](https://www.webforum.nu/a/95.zip)

Permalänk: https://www.webforum.nu/p/663621

## #6 — jarvklo, 2002-05-01T15:49Z

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:
1) 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" ;) )

2) 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

Permalänk: https://www.webforum.nu/p/663704

---

Tråden på webben: https://www.webforum.nu/amne/xml/42793-svg-xslt-html
