Hallo Frederik,
Dabei können eben beliebig viele image-Elemente auftreten, es soll aber nur ein defs-Element geben. Wenn ich jetzt ein template auf image anwende, kann ich das filter-Element nicht in ein bestehendes defs-Element schreiben. Oder doch?
Ich weiß nicht, ob ich das richtig verstanden habe -- mal ein Versuch unter der Annahme dieses XML-Dokuments:
<?xml version="1.0" encoding="ISO-8859-1"?>
<root>
<image href="test1.png" saturation="40"></image>
<image href="test2.png" saturation="50"></image>
<image href="test3.png" saturation="60"></image>
</root>
XSL-Stylesheet:
<?xml version="1.0" encoding="ISO-8859-1"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:output method="xml" version="1.0" encoding="ISO-8859-1" media-type="image/svg+xml" indent="yes"/>
<xsl:template match="root">
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<xsl:for-each select="image">
<filter id="xyz{position()}">
verarbeite saturation <xsl:value-of select="@saturation"/> ...
</filter>
</xsl:for-each>
</defs>
<xsl:for-each select="image">
<image xlink:href="{@href}" filter="url(#xyz{position()})"/>
</xsl:for-each>
</svg>
</xsl:template>
</xsl:stylesheet>
SVG-Ergebnis:
<?xml version="1.0" encoding="ISO-8859-1"?>
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
<defs>
<filter id="xyz1">
verarbeite saturation 40 ...
</filter>
<filter id="xyz2">
verarbeite saturation 50 ...
</filter>
<filter id="xyz3">
verarbeite saturation 60 ...
</filter>
</defs>
<image xlink:href="test1.png" filter="url(#xyz1)"/>
<image xlink:href="test2.png" filter="url(#xyz2)"/>
<image xlink:href="test3.png" filter="url(#xyz3)"/>
</svg>
Grüße,
Thomas