xsl-list
[Top] [All Lists]

Re: transforming xml to tables

2004-06-16 00:15:01
On Tuesday 15 June 2004 00:41, Pedro Castro wrote:
Hi, all. I'm a beginner in this xsl world and I'm trying to learn.
I could do the work I have to do in a different way but I'm trying to see
the advantages of xsl (which are convincing me). But I was stopped in the
process because of a problem which I (try to) describe next:

You need two XSL passes, generating one file for each pass.

The first one is very simple, as you take the 'same suff' strip out some 
attributes and check a string containing the _ID at the end...

<xsl:template match="aaa" >
  <table>
    <xsl:attribute name="name">
      <xsl:value-of select="@name" />
    </xsl:attribute>
    <xsl:apply-templates />
  </table>
</xsl:template>

<xsl:template match="bbb" >
  <column>
    <xsl:attribute name="name">
      <xsl:value-of select="@name" />
    </xsl:attribute>
    <xsl:if test="contains( @name, '_ID' )" >
      <xsl:attribute name="primaryKey">true</xsl:attribute>
    </xsl:if>
  </column>
</xsl:template>


The second phase is handled roughly the manner...

<xsl:template match="aaa/bbb[ @type = 't2'] " >
  <table>
    <xsl:attribute name="name">
      <xsl:value-of select="../@name" />
    </xsl:attribute>
<!-- You need to extract the pieces you want to generate the required result 
here. I'm barely awake to follow your intentions, and this section will get a 
little bit 'tricky', so some trial and error will help, but basically no 
template matching/applying should be used. -->
  </table>
</xsl:template>


Hope that help as a start...

Cheers
Niclas


I have the following xml:

<aaa name="t1">
      <bbb name="t1_ID" type="n"/>
      <bbb name="c1" type="t2"/>
      <bbb name="c2"/>
      <bbb name="c3" type="n"/>
</aaa>

And I want to transform this (part) into a script for create a relational
table structure (for later processing):

(A table has always an id that is conventioned to be the table name
followed by "_ID" word)

<table name="t1">
      <column name="t1_ID" primaryKey="true"/>
      <column name="c1"/>
      <column name="c2"/>
      <column name="c3"/>
</table>

<table name="t1_t2_nxn">
      <column name="t1_ID" primaryKey="true"/>
      <column name="t2_ID" primaryKey="true"/>
      <foreign-key foreignTable="t1">
              <reference local="t1_ID" foreign="t1_ID"/>
      </foreign-key>
      <foreign-key foreignTable="t2">
              <reference local="t2_ID" foreign="t2_ID"/>
      </foreign-key>
</table>


The rules for transformation are simple: if an inner element for the <aaa>
element has a type other than none or "n" (like the type="t2" case) than i
need to create the second table which is an n x n table between t1 and (an
already existent) t2 table.

Is this possible to do in xsl?
I'm sorry for the long question, and I hope that anybody can understand and
help :)

Thanks in advance!!


Pedro Castro.
Portugal.



--+------------------------------------------------------------------
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>
--+--

-- 
   +------//-------------------+
  / http://www.bali.ac        /
 / http://niclas.hedhman.org / 
+------//-------------------+



<Prev in Thread] Current Thread [Next in Thread>
  • Re: transforming xml to tables, Niclas Hedhman <=