xsl-list
[Top] [All Lists]

Re: attribute values as name value pair

2004-02-26 19:50:08

Given a input xml of
        <input>
                <data>...</data>
                <table>...</table>
        </input>

Will this do what you want?  It's probably not the most efficent since I'm
doing n*n for-each loops... :(

<?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" indent="yes"/>

    <xsl:template match="/">
        <data>
            <xsl:apply-templates select="./input/data"/>
        </data>
    </xsl:template>

    <xsl:template match="data">
        <xsl:apply-templates select="./row"/>
    </xsl:template>

    <xsl:template match="row">
        <xsl:variable name="row_attributes" select="@*"/>
        <xsl:variable name="column_count" select="position()"/>
        <xsl:for-each select="/input/table/columns/column">
            <xsl:variable name="row_name" select="@name"/>
            <xsl:element name="row">
                <xsl:attribute name="id">
                    <xsl:value-of select="position() * $column_count"/>
                </xsl:attribute>
                <xsl:attribute name="key">
                    <xsl:value-of select="@value"/>
                </xsl:attribute>
                <xsl:attribute name="value">
                    <xsl:for-each select="$row_attributes">
                        <xsl:if test="local-name(.) = $row_name">
                            <xsl:value-of select="."/>
                        </xsl:if>
                    </xsl:for-each>
                </xsl:attribute>
            </xsl:element>
        </xsl:for-each>
    </xsl:template>

</xsl:stylesheet>

 XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list



<Prev in Thread] Current Thread [Next in Thread>