view etl/doc/repair.xsl @ 6087:47775e3a8cf6

Datacage: Introduced <dc:virtual-column name="colname" type="type" expr="XPath"> dc:virtual-column can be used to virtual add or replace a column named 'colname' to the current result set. The value is determined by evaluating "XPath", the type is determined by "type" (possible values: number, bool, node, nodeset, string. defaults to string). Usage: <dc:virtual-column name="c" type="number" expr="$a+$b"> <dc:for-each> <dc:message>{$a} + {$b} = {$c}</dc:message> </dc:for-each> </dc:virtual-column> table a | b --+-- 1 | 2 3 | 4 will result in: 1 + 2 = 3 3 + 4 = 7
author Sascha L. Teichmann <teichmann@intevation.de>
date Fri, 24 May 2013 12:19:25 +0200
parents 5aa05a7a34b7
children
line wrap: on
line source
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">

    <xsl:output method="xml"/>

    <xsl:key name="gauge-name" match="/STATIONEN/STATION" use="@NAME"/>

    <xsl:template name="lookup-gauge-number">
        <xsl:param name="name"/>
        <xsl:param name="number"/>
        <xsl:variable name="fixed-number">
            <xsl:for-each select="document('pegelstationen.xml')">
                <xsl:value-of select="key('gauge-name', $name)/@NUMMER"/>
            </xsl:for-each>
        </xsl:variable>
        <xsl:choose>
            <xsl:when test="$fixed-number != ''">
                <xsl:value-of select="$fixed-number"/>
            </xsl:when>
            <xsl:otherwise>
                <xsl:value-of select="$number"/>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template match="/DIPSFLYS/STATIONEN/PEGELSTATION">
        <PEGELSTATION>
        <xsl:attribute name="NUMMER">
            <xsl:call-template name="lookup-gauge-number">
                <xsl:with-param name="name" select="@NAME"/>
                <xsl:with-param name="number" select="@NUMMER"/>
            </xsl:call-template>
        </xsl:attribute>
        <xsl:apply-templates select="@*[local-name() != 'NUMMER']"/>
        <xsl:apply-templates select="node()"/>
        </PEGELSTATION>
    </xsl:template>

    <xsl:template match="@*|node()">
       <xsl:copy>
          <xsl:apply-templates select="@*|node()"/>
       </xsl:copy>
    </xsl:template>

</xsl:stylesheet>

http://dive4elements.wald.intevation.org