xsl-list
[Top] [All Lists]

Creating HTML by selecting XML attribute names

2005-09-15 10:38:09
Hello,

I am trying to convert some XML to HTML using the latest version of Xalan. 
However, I am having difficulty in selecting the correct elements from my XML 
source file. What I am trying to do is select the data from the rows/row/fields 
in the order it appears in the columns/column, and output it to a HTML table. 
The XML itself is generated so the attributes of the columns could change each 
time. I.e. in this example we have the attributes 'name' and 'age', but next 
time round they could be 'title', 'name', 'address'.

How can I select each of the attributes of the column, and then query the 
fields in the order specified in the source file?

I have something that works for the XML in this example, but not if the XML 
changes.

XML file >>>

<?xml version="1.0" encoding="UTF-8"?>
<table>
<table-config>
        <classes>
        <table-title-class>tituloClass</table-title-class>
        ...
        </classes>
        <columns>
        <column field="name" label="Nome"/>
        <column align="right" field="age" label="Idade"/>
        </columns>
</table-config>
<rows>
        <row>
        <field age="45" name="Nome 1"/>
        </row>
        <row>
        <field age="54" name="Nome 2"/>
        </row>
        ...
</rows>

XSL file excerpt >>>

<xsl:template match="rows">
    <xsl:apply-templates select="row/field"/>
    </xsl:template>
           
    <xsl:template match="row/field">
    <!-- 
    I have this: <field age="45" name="Nome 1"/>. But the attributes may change.
    I need to get a handle on the attributes.
    -->
    
    <xsl:variable name="fieldName" select="@name"/>
    <xsl:variable name="fieldValue" select="@age"/>
    <tr>
    <td>
        <xsl:value-of select="$fieldName"/><br/>
    </td>
    <td>
        
        <!-- This successfully loops through the columns -->
        <xsl:for-each select="/table/table-config/columns/column">

        <xsl:if test="@field = 'age'">
        <xsl:attribute name="align">
            <xsl:value-of select="@align"/>
        </xsl:attribute>                                                        
    

        </xsl:if>
        </xsl:for-each>
        <xsl:value-of select="$fieldValue"/><br/>
    </td>
    </tr>
    </xsl:template>

The output I want is: 
Name            Age
Nome 1          45
Nome 2             54

...but it needs to change if the input XML provides additional columns. Is this 
possible using XSLT?

Thoughts appreciated. With Regards,
Julian

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--



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