comparison flys-artifacts/contrib/inline-dc-attribute.xsl @ 5499:43bf4976dd24

Add XSL transformation that replaces <dc:attribute> with their shortened inline notation.
author Sascha L. Teichmann <teichmann@intevation.de>
date Thu, 28 Mar 2013 15:12:26 +0100
parents
children
comparison
equal deleted inserted replaced
5498:d459a885c51f 5499:43bf4976dd24
1 <?xml version="1.0" encoding="UTF-8"?>
2 <!--
3 inline-dc-attribute.xsl
4 =======================
5 Transforms datacage templates from:
6
7 <foo>
8 <dc:element name="bar" value="${baz}"/>
9 <dc:element name="bla" value="${blub}-${urgs}"/>
10 </foo>
11
12 to:
13
14 <foo bar="{$bar} bla="{$blub}-{$urgs}/>
15 -->
16 <xsl:stylesheet version="1.0"
17 xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
18 xmlns:dc="http://www.intevation.org/2011/Datacage">
19
20 <xsl:output method="xml" encoding="UTF-8" indent="yes"/>
21
22 <xsl:template name="string-replace-all">
23 <xsl:param name="text"/>
24 <xsl:param name="replace"/>
25 <xsl:param name="by"/>
26 <xsl:choose>
27 <xsl:when test="contains($text, $replace)">
28 <xsl:value-of select="substring-before($text,$replace)"/>
29 <xsl:value-of select="$by"/>
30 <xsl:call-template name="string-replace-all">
31 <xsl:with-param name="text" select="substring-after($text,$replace)"/>
32 <xsl:with-param name="replace" select="$replace"/>
33 <xsl:with-param name="by" select="$by"/>
34 </xsl:call-template>
35 </xsl:when>
36 <xsl:otherwise>
37 <xsl:value-of select="$text"/>
38 </xsl:otherwise>
39 </xsl:choose>
40 </xsl:template>
41
42 <xsl:template
43 match="node()[count(dc:attribute) &gt; 0 and namespace-uri() != 'http://www.intevation.org/2011/Datacage']">
44 <xsl:copy>
45 <xsl:for-each select="./dc:attribute">
46 <xsl:attribute name="{@name}">
47 <xsl:call-template name="string-replace-all">
48 <xsl:with-param name="text" select="@value"/>
49 <xsl:with-param name="replace">${</xsl:with-param>
50 <xsl:with-param name="by">{$</xsl:with-param>
51 </xsl:call-template>
52 </xsl:attribute>
53 </xsl:for-each>
54 <xsl:apply-templates select="@*|node()" mode="ignore-text"/>
55 </xsl:copy>
56 </xsl:template>
57
58 <xsl:template match="dc:attribute|text()" mode="ignore-text"/>
59 <xsl:template match="@*|node()" mode="ignore-text">
60 <xsl:copy>
61 <xsl:apply-templates select="@*|node()"/>
62 </xsl:copy>
63 </xsl:template>
64
65 <xsl:template match="@*|node()">
66 <xsl:copy>
67 <xsl:apply-templates select="@*|node()"/>
68 </xsl:copy>
69 </xsl:template>
70
71 </xsl:stylesheet>

http://dive4elements.wald.intevation.org