xsl-list
[Top] [All Lists]

[xsl] Tricky transformation task

2007-07-11 07:42:04
I have the following XML structure which shows me links between objects (O1/O2).

<LINKS>
     <LINK ID="2" O1-ID="1" O2-ID="3"/>
     <LINK ID="10" O1-ID="1" O2-ID="11"/>
     <LINK ID="14" O1-ID="11" O2-ID="15"/>
     <LINK ID="18" O1-ID="2" O2-ID="4"/>
     <LINK ID="22" O1-ID="2" O2-ID="8"/>
     <LINK ID="26" O1-ID="8" O2-ID="17"/>
       ...
</LINKS>

I need to transform this into another XML structure showing me witch objects (O1/O2) and links (ID) are in the same subgraph. So I have to add something like another ID identifying which of the objects and links belong to the same graph (SUBG-ID).

this is the structure I would like to have:

<SUBG-ITEMS>
        <ITEM SUBG-ID="0" ITEM-ID="1" ITEM-TYPE="O" NAME="Object"/>
        <ITEM SUBG-ID="0" ITEM-ID="3" ITEM-TYPE="O" NAME="Object"/>
        <ITEM SUBG-ID="0" ITEM-ID="11" ITEM-TYPE="O" NAME="Object"/>
        <ITEM SUBG-ID="0" ITEM-ID="15" ITEM-TYPE="O" NAME="Object"/>
        <ITEM SUBG-ID="0" ITEM-ID="2" ITEM-TYPE="L" NAME="Link"/>
        <ITEM SUBG-ID="0" ITEM-ID="10" ITEM-TYPE="L" NAME="Link"/>
        <ITEM SUBG-ID="0" ITEM-ID="14" ITEM-TYPE="L" NAME="Link"/>

        <ITEM SUBG-ID="1" ITEM-ID="18" ITEM-TYPE="O" NAME="Object"/>
        <ITEM SUBG-ID="1" ITEM-ID="2" ITEM-TYPE="O" NAME="Object"/>
         ...
</SUBG-ITEMS>

I have thought about different ways on how to achieve this but they seem way too difficult or too time consuming at runtime. I need an easy way to give out ID's, how could I do this besides counting or maybe use the position() inside for-each? And I thought about checking previous links to see if an object is already present, if so the same SUBG-ID (count?) would have to be used.

Any hints on how to optimize this task would be very helpful. (XSL1 or 2)

Cheers
Jimmy

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