Click to See Complete Forum and Search --> : Seeking Help for creating a XSL


soumyadeepb
06-06-2007, 04:58 AM
Hi,
I have the following XML


<ObservationOrderGroup>
<ObservationOrderType>GCS</ObservationOrderType>
<ObservationOrderResultList>
<ObservationOrderResultDateTime>2007-02-09T17:10:45.0000000+08:00</ObservationOrderResultDateTime>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>Total</ObservationOrderResultDesc>
<ObservationOrderResultValue>3</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>M</ObservationOrderResultDesc>
<ObservationOrderResultValue>1</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>E</ObservationOrderResultDesc>
<ObservationOrderResultValue>1</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>V</ObservationOrderResultDesc>
<ObservationOrderResultValue>1</ObservationOrderResultValue>
</ObservationOrderResultInfo>
</ObservationOrderResultList>
<ObservationOrderResultList>
<ObservationOrderResultDateTime>2007-02-09T17:54:42.0000000+08:00</ObservationOrderResultDateTime>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>Total</ObservationOrderResultDesc>
<ObservationOrderResultValue>6</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>M</ObservationOrderResultDesc>
<ObservationOrderResultValue>2</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>E</ObservationOrderResultDesc>
<ObservationOrderResultValue>2</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>V</ObservationOrderResultDesc>
<ObservationOrderResultValue>2</ObservationOrderResultValue>
</ObservationOrderResultInfo>
</ObservationOrderResultList>
</ObservationOrderGroup>
<ObservationOrderGroup>
<ObservationOrderType>Parameters</ObservationOrderType>
<ObservationOrderResultList>
<ObservationOrderResultDateTime>2007-02-09T17:11:01.0000000+08:00</ObservationOrderResultDateTime>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>BP(mmHg)</ObservationOrderResultDesc>
<ObservationOrderResultValue>111/11</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>EtCO2(mmHg)</ObservationOrderResultDesc>
<ObservationOrderResultValue>111</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>SpO2(%)</ObservationOrderResultDesc>
<ObservationOrderResultValue>111%111</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>Resp(/min)</ObservationOrderResultDesc>
<ObservationOrderResultValue>1</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>MAP(mmHg)</ObservationOrderResultDesc>
<ObservationOrderResultValue>11</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>Pulse(/min)</ObservationOrderResultDesc>
<ObservationOrderResultValue>111</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>Temp(°C)</ObservationOrderResultDesc>
<ObservationOrderResultValue>111</ObservationOrderResultValue>
</ObservationOrderResultInfo>
</ObservationOrderResultList>
<ObservationOrderResultList>
<ObservationOrderResultDateTime>2007-02-09T17:55:11.0000000+08:00</ObservationOrderResultDateTime>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>BP(mmHg)</ObservationOrderResultDesc>
<ObservationOrderResultValue>22/22</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>EtCO2(mmHg)</ObservationOrderResultDesc>
<ObservationOrderResultValue>2</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>SpO2(%)</ObservationOrderResultDesc>
<ObservationOrderResultValue>2%2</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>Resp(/min)</ObservationOrderResultDesc>
<ObservationOrderResultValue>2</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>MAP(mmHg)</ObservationOrderResultDesc>
<ObservationOrderResultValue>22</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>Pulse(/min)</ObservationOrderResultDesc>
<ObservationOrderResultValue>22</ObservationOrderResultValue>
</ObservationOrderResultInfo>
<ObservationOrderResultInfo>
<ObservationOrderResultDesc>Temp(°C)</ObservationOrderResultDesc>
<ObservationOrderResultValue>22</ObservationOrderResultValue>
</ObservationOrderResultInfo>
</ObservationOrderResultList>
</ObservationOrderGroup>

Now, I need to design the XSL such that for ObservationOrderType = GCS a table form in following fashion,

Date Total M E V
2007-02-09 3 1 1 1
2007-02-09 6 2 2 2


And another table will form for ObservationOrderType = Parameters in the following way,

Date BP(mmHg) EtCO2(mmHg) SpO2(%) Resp(/min) .......
2007-02-09 111/11 111 1 11 .....
2007-02-09 22/22 2 2%2 2 ....



Your help will be highly appreciated.

Lots of thanks in advance

jkmyoung
06-06-2007, 09:39 AM
If you can guarantee that the headers in each eg BP(mmHG), E, are different in each table, I would recommend the Muenchian method on the ObservationOrderResultInfo nodes:
http://www.jenitennison.com/xslt/grouping/muenchian.html

What level of help are you looking for?
Good references:
http://www.w3schools.com/xsl/default.asp
http://www.devguru.com/technologies/xslt/index.asp

soumyadeepb
06-06-2007, 09:46 AM
Yes...for each table the headers are different,

There are two types of <ObservationOrderType>. For one the value is "GCS" and the other is "Parameters". And for both this type, the Table hearders are different.

But for each type, there are loopings.

jkmyoung
06-06-2007, 02:43 PM
The relationship seems to be as follows:
Table: ObservationOrderGroup Nodes
Row: ObservationOrderResultList
Cell: ObservationOrderResultInfo

Upon observing your info further, you probably just need a few simple templates, no fancy grouping, assuming that your data will always be a full set, not missing any fields.

<xsl:template match="ObservationOrderGroup">
<table>
<tbody>
<tr>
<!-- header row -->
<th>Date</th>
<xsl:for-each select="ObservationOrderResultList[1]/ObservationOrderResultInfo">
<!-- individual headings -->
<th><xsl:value-of select="ObservationOrderResultDesc"/></th>
</xsl:for-each>
</tr>
<xsl:apply-templates select="ObservationOrderResultList"/>
</tbody>
</table>
</xsl:template>
<xsl:template match="ObservationOrderResultList">
<tr>
<td><xsl:value-of select="substring(ObservationOrderResultDateTime,1,10)"/></td>
<xsl:apply-templates select="ObservationOrderResultInfo"/>
</tr>
</xsl:template>
<xsl:template match="ObservationOrderResultInfo">
<td><xsl:value-of select="ObservationOrderResultValue"/></td>
</xsl:template>