This is the mail archive of the
xsl-list@mulberrytech.com
mailing list .
xsl structuring....
- To: xsl-list at mulberrytech dot com
- Subject: xsl structuring....
- From: "Saif Khaja" <ksaif25 at hotmail dot com>
- Date: Mon, 02 Oct 2000 16:12:02 PDT
- Reply-To: xsl-list at mulberrytech dot com
Hi everyone,
I am having a structuring problem with displaying the xml file in the format
I want. Even though I think it must be a common one cause I came accross
similar kind of structuring many times, but this time it is in XSL.
I have an XML file in this format.
<History>
<des>
<desRow>
<name>n1</name>
<qty>10</qty>
</desRow>
<desRow>
<name>n2</name>
<qty>11</qty>
</desRow>
<desRow>
<name>n3</name>
<qty>12</qty>
</desRow>
<desRow>
<name>n6</name>
<qty>14</qty>
</desRow>
<desRow>
<name>n7</name>
<qty>15</qty>
</desRow>
</des>
<asis>
<asRow>
<name>n1</name>
<qty>20</qty>
</asRow>
<asRow>
<name>n2</name>
<qty>21</qty>
</asRow>
<asRow>
<name>n3</name>
<qty>22</qty>
</asRow>
<asRow>
<name>n9</name>
<qty>30</qty>
</asRow>
</asis>
</History>
/* ********************************************** */
Now my problem is to display it in the following format.
Name desQty asisQty
n1 10 20
n2 11 21
n3 12 22
n6 14 -
n7 15 -
n9 - 30
To achieve this, using the traditional sequential programming approach, I do
the following. (Still hard to think in terms of structured - recursive
approach.) :)
<xsl:for-each select="des/desRow"
<xsl:variable name="desName" select="name"/>
<TR><TD><xsl:value-of select="name"/></TD>
<TD<xsl:value-of select="qty"/></TD>
<xsl:for-each select="asis/asRow"
<xsl:if test="$desName = name">
<TD><xsl:value-of select="qty"/></TD>
</xsl:if>
</xsl:for-each> </TR>
</xsl:for-each>
This <xsl:for-each> block will get all the common elements and new elements
in "des".
And I am unable to think of a way to get the new elements in "asis". To get
this if I write another FOR loop, with "asis" as outer loop, still I will
have no way to determine that a match has been made and that it is a new
element. How much I wish XSL had (actual)variables even though it has one. I
would have used a flag and set it to true if a match was made and it would
have solved my problem.
To get around this problem, I was thinking of another dumb way.
Is there any way you can change the XML from XSL?????????????
I was thinking of having a flag attribute for each "Row" and set it to true
if a match has been made. But then I know it is not right as you are
changing content for display.
Please, any suggestions towards this from the XSL gurus will be greatly
appreciated.
Thanx,
-Saif.
_________________________________________________________________________
Get Your Private, Free E-mail from MSN Hotmail at http://www.hotmail.com.
Share information about yourself, create your own public profile at
http://profiles.msn.com.
XSL-List info and archive: http://www.mulberrytech.com/xsl/xsl-list