Wrox Programmer Forums
Go Back   Wrox Programmer Forums > XML > XSLT
|
XSLT General questions and answers about XSLT. For issues strictly specific to the book XSLT 1.1 Programmers Reference, please post to that forum instead.
Welcome to the p2p.wrox.com Forums.

You are currently viewing the XSLT section of the Wrox Programmer to Programmer discussions. This is a community of software programmers and website developers including Wrox book authors and readers. New member registration was closed in 2019. New posts were shut off and the site was archived into this static format as of October 1, 2020. If you require technical support for a Wrox book please contact http://hub.wiley.com
 
Old March 15th, 2009, 11:14 AM
Authorized User
 
Join Date: Mar 2009
Posts: 50
Thanks: 7
Thanked 0 Times in 0 Posts
Default

it seems to have grouped the layerID's and layerDescription's okay.

Where its still slightly wrong is within the grouping of data for distanceGL and altitudeGL etc.

Here is my XSLT code for the generation of values (maybe I'm missing one of your points):
Code:
    <xsl:variable name="groundLayers" as="element(layers)+">
      <xsl:for-each-group
        select="geo:slope/geo:groundLayers/diggs:Hole/diggs:layerSystems/diggs:LayerSystem/diggs:layers/diggs:Layer"
        group-by="diggs:id">
        <xsl:sort select="current-grouping-key()"/>

        <xsl:variable name="layerName" select="diggs:primaryName"/>
        <xsl:variable name="layerTopDepth" select="diggs:top/gml:pos"/>
        <xsl:variable name="layerBaseDepth" select="diggs:base/gml:pos"/>

        <layers xmlns="">
          <xsl:variable name="groundLayer" as="xs:integer+"
            select="parent::diggs:layers/parent::diggs:LayerSystem/parent::diggs:layerSystems/parent::diggs:Hole/geo:point3(.)"/>
          <xsl:variable name="coordinateX1" as="xs:integer" select="$groundLayer[1]"/>
          <xsl:variable name="coordinateY1" as="xs:integer" select="$groundLayer[2]"/>

          <xsl:variable name="c2" as="xs:decimal" select="$groundLayer[2] - (($m2)*$groundLayer[1])"/>
          <xsl:variable name="cdiff" as="xs:decimal" select="$c1 - $c2"/>
          <xsl:variable name="xi" as="xs:decimal" select="$cdiff div $mdiff"/>
          <xsl:variable name="yi" as="xs:decimal" select="($m2*$xi)+$c2"/>
          <xsl:variable name="xdiff" as="xs:decimal" select="$toe[1] - $xi"/>
          <xsl:variable name="ydiff" as="xs:decimal" select="$toe[2] - $yi"/>

          <xsl:variable name="distanceGL"
            select="xs:integer(round(math:sqrt($ydiff * $ydiff + $xdiff * $xdiff)))" as="xs:decimal"/>
          <xsl:variable name="heightGL" as="xs:integer"
            select="parent::diggs:layers/parent::diggs:LayerSystem/parent::diggs:layerSystems/preceding-sibling::diggs:location/geo:height"/>
          <xsl:variable name="altitudeGL" as="xs:integer">
            <xsl:choose>
              <xsl:when test="$altitude[1] &lt; 0">
                <xsl:value-of select="$heightGL - $altitude[1]"/>
              </xsl:when>
              <xsl:otherwise>
                <xsl:value-of select="$heightGL - $altitude[1]"/>
              </xsl:otherwise>
            </xsl:choose>
          </xsl:variable>

          <xsl:variable name="layerId" select="diggs:id" as="xs:integer"/>
          <xsl:variable name="layerDescription"
            select="diggs:descriptions/diggs:Description/diggs:value"/>
          <layerId>
            <xsl:value-of select="$layerId"/>
          </layerId>
          <layerDescription>
            <xsl:value-of select="$layerDescription"/>
          </layerDescription>
          <layerName>
            <xsl:value-of select="$layerName"/>
          </layerName>
          <heightGL>
            <xsl:value-of select="$heightGL"/>
          </heightGL>

          <xsl:for-each select="current-group()">
            <groundLayer xmlns="">
              <distanceGL>
                <xsl:value-of select="$distanceGL"/>
              </distanceGL>
              <altitudeGL>
                <xsl:value-of select="$altitudeGL"/>
              </altitudeGL>
              <coordinateX1>
                <xsl:value-of select="$coordinateX1"/>
              </coordinateX1>
              <coordinateY1>
                <xsl:value-of select="$coordinateY1"/>
              </coordinateY1>
              <layerTopDepth>
                <xsl:value-of select="$layerTopDepth"/>
              </layerTopDepth>
              <layerBaseDepth>
                <xsl:value-of select="$layerBaseDepth"/>
              </layerBaseDepth>
            </groundLayer>
          </xsl:for-each>
 
Old March 15th, 2009, 11:28 AM
Authorized User
 
Join Date: Mar 2009
Posts: 50
Thanks: 7
Thanked 0 Times in 0 Posts
Default It may be sorted!

Hi - the first time i read your reply I wasn't sure if you meant to arrange the variable or just the declaration of the variables with the value-of's.

Well now I have sorted it all out according to what you said and the XLST looks like this:
Code:
<xsl:variable name="groundLayers" as="element(layers)+">
      <xsl:for-each-group
        select="geo:slope/geo:groundLayers/diggs:Hole/diggs:layerSystems/diggs:LayerSystem/diggs:layers/diggs:Layer"
        group-by="diggs:id">
        <xsl:sort select="current-grouping-key()"/>
        <layers xmlns="">
          <xsl:variable name="layerName" select="diggs:primaryName"/>
          <xsl:variable name="layerId" select="diggs:id" as="xs:integer"/>
          <xsl:variable name="layerDescription"
            select="diggs:descriptions/diggs:Description/diggs:value"/>
          <xsl:variable name="heightGL" as="xs:integer"
            select="parent::diggs:layers/parent::diggs:LayerSystem/parent::diggs:layerSystems/preceding-sibling::diggs:location/geo:height"/>
          <layerId>
            <xsl:value-of select="$layerId"/>
          </layerId>
          <layerDescription>
            <xsl:value-of select="$layerDescription"/>
          </layerDescription>
          <layerName>
            <xsl:value-of select="$layerName"/>
          </layerName>
          <heightGL>
            <xsl:value-of select="$heightGL"/>
          </heightGL>

          <xsl:for-each select="current-group()">
            <xsl:variable name="layerTopDepth" select="diggs:top/gml:pos"/>
            <xsl:variable name="layerBaseDepth" select="diggs:base/gml:pos"/>
            <xsl:variable name="groundLayer" as="xs:integer+"
              select="parent::diggs:layers/parent::diggs:LayerSystem/parent::diggs:layerSystems/parent::diggs:Hole/geo:point3(.)"/>
            <xsl:variable name="coordinateX1" as="xs:integer" select="$groundLayer[1]"/>
            <xsl:variable name="coordinateY1" as="xs:integer" select="$groundLayer[2]"/>

            <xsl:variable name="c2" as="xs:decimal"
              select="$groundLayer[2] - (($m2)*$groundLayer[1])"/>
            <xsl:variable name="cdiff" as="xs:decimal" select="$c1 - $c2"/>
            <xsl:variable name="xi" as="xs:decimal" select="$cdiff div $mdiff"/>
            <xsl:variable name="yi" as="xs:decimal" select="($m2*$xi)+$c2"/>
            <xsl:variable name="xdiff" as="xs:decimal" select="$toe[1] - $xi"/>
            <xsl:variable name="ydiff" as="xs:decimal" select="$toe[2] - $yi"/>

            <xsl:variable name="distanceGL"
              select="xs:integer(round(math:sqrt($ydiff * $ydiff + $xdiff * $xdiff)))"
              as="xs:decimal"/>
            <xsl:variable name="altitudeGL" as="xs:integer">
              <xsl:choose>
                <xsl:when test="$altitude[1] &lt; 0">
                  <xsl:value-of select="$heightGL - $altitude[1]"/>
                </xsl:when>
                <xsl:otherwise>
                  <xsl:value-of select="$heightGL - $altitude[1]"/>
                </xsl:otherwise>
              </xsl:choose>
            </xsl:variable>
            
            <groundLayer xmlns="">
              <distanceGL>
                <xsl:value-of select="$distanceGL"/>
              </distanceGL>
              <altitudeGL>
                <xsl:value-of select="$altitudeGL"/>
              </altitudeGL>
              <coordinateX1>
                <xsl:value-of select="$coordinateX1"/>
              </coordinateX1>
              <coordinateY1>
                <xsl:value-of select="$coordinateY1"/>
              </coordinateY1>
              <layerTopDepth>
                <xsl:value-of select="$layerTopDepth"/>
              </layerTopDepth>
              <layerBaseDepth>
                <xsl:value-of select="$layerBaseDepth"/>
              </layerBaseDepth>
            </groundLayer>
          </xsl:for-each>


        </layers>
      </xsl:for-each-group>
    </xsl:variable>
And the result is this
Code:
<layers>
            <layerId>1</layerId>
            <layerDescription>Medium dense red brown clayey very sandy
                                                angular to rounded fine to coarse quartz, igneous material,
                                                sandstone and concrete GRAVEL.</layerDescription>
            <layerName>Layer1</layerName>
            <heightGL>749</heightGL>
            <groundLayer xmlns="">
               <distanceGL>1003 640 429 102</distanceGL>
               <altitudeGL>819 819 819 819</altitudeGL>
               <coordinateX1>316865 316570 316850 316065</coordinateX1>
               <coordinateY1>504940 505159 505727 505418</coordinateY1>
               <layerTopDepth>0 0 0 0</layerTopDepth>
               <layerBaseDepth>400 150 100 50</layerBaseDepth>
            </groundLayer>
         </layers>
         <layers>
            <layerId>2</layerId>
            <layerDescription>Very weak green grey MUDSTONE. Fractures are closely spaced,
                                                horizontal, clean and smooth. (Eldersfield Mudstone
                                                Formation)</layerDescription>
            <layerName>Layer2</layerName>
            <heightGL>749</heightGL>
            <groundLayer xmlns="">
               <distanceGL>1003 640</distanceGL>
               <altitudeGL>819 819</altitudeGL>
               <coordinateX1>316865 316570</coordinateX1>
               <coordinateY1>504940 505159</coordinateY1>
               <layerTopDepth>400 150</layerTopDepth>
               <layerBaseDepth>550 150</layerBaseDepth>
            </groundLayer>
         </layers>
         <layers>
            <layerId>3</layerId>
            <layerDescription>Medium dense to dense red brown slightly clayey SAND and
                                                GRAVEL with rare cobbles. Gravel is subangular to rounded fine
                                                to coarse of quartz, igneous material and sandstone. Cobbles are
                                                subangular to rounded of quartz and igneous material. (River
                                                Terrace Deposits)</layerDescription>
            <layerName>Layer3</layerName>
            <heightGL>749</heightGL>
            <groundLayer xmlns="">
               <distanceGL>1003 640 429 102</distanceGL>
               <altitudeGL>819 819 819 819</altitudeGL>
               <coordinateX1>316865 316570 316850 316065</coordinateX1>
               <coordinateY1>504940 505159 505727 505418</coordinateY1>
               <layerTopDepth>550 150 100 50</layerTopDepth>
               <layerBaseDepth>750 470 270 220</layerBaseDepth>
            </groundLayer>
         </layers>
So now it actually looks good across the board!UNREAL!

I'll now perform the task of drawing the path and then get back to you.
 
Old March 15th, 2009, 11:28 AM
Friend of Wrox
 
Join Date: Nov 2007
Posts: 1,243
Thanks: 0
Thanked 245 Times in 244 Posts
Default

I think you want/need to move the computation of those variables (like distanceGL) that vary for each item in the group into the inner xsl:for-each. Currently you compute them once for each group but if I understand you correctly then these are values that vary even inside of each group so you need to move the computation into the inner xsl:for-each.
__________________
Martin Honnen
Microsoft MVP (XML, Data Platform Development) 2005/04 - 2013/03
My blog
 
Old March 15th, 2009, 12:02 PM
Authorized User
 
Join Date: Mar 2009
Posts: 50
Thanks: 7
Thanked 0 Times in 0 Posts
Default struggling to draw path

Hmmm - it seems the path's tricky to now draw (or I'm missing a step!)

Code:
<xsl:for-each select="$groundLayers">
          <path id="groundLayer{$layerId}" stroke="url(#{$grad})" stroke-width="2"
            fill="url(#{$grad})" clip-path="url(#level2clip)">
            <xsl:attribute name="d">
              <xsl:for-each select="self::layers[1]">
                <xsl:sort select="xs:double(distanceGL)" order="descending"/>
                <xsl:text>M</xsl:text>
                <xsl:value-of select="$distance - distanceGL"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="$height - altitudeGL + layerTopDepth"/>
              </xsl:for-each>
              <xsl:text> L </xsl:text>
              <xsl:for-each select="groundLayer">
                <xsl:sort select="xs:double(distanceGL)" order="descending"/>
                <xsl:value-of
                  select="concat($distance - distanceGL, ' ', $height - altitudeGL + layerTopDepth)"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>, </xsl:text>
              <xsl:for-each select="groundLayer">
                <xsl:sort select="xs:double(distanceGL)" order="ascending"/>
                <xsl:value-of
                  select="concat($distance - distanceGL, ' ', $height - altitudeGL + layerBaseDepth)"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>z</xsl:text>
            </xsl:attribute>
          </path>
</for-each>
edit: I receive an error: "[Saxon-B 9.1.0.3] A sequence of more than one item is not allowed as the second operand of '-'

it is referring to where distanceGL has been subtracted from $distance (just after declaring 'M). This means that it's seeing distanceGL values as strings and not individual numbers. This means that something is not looping well I guess. I need a path for-each different diggs:id


edit2: in the path: d="Mx y Lx y, a b, c d, c d, a bz" x and y are the starting coordinates for the path. The path then needs to travel between each location, generating the coordinates as per the mini concat equations above. Once it gets to the end it then needs to do the same but in reverse order of location (and now using layer base depth as opposed to layer top depth on the first direction). Then the layer ends by closing using 'z'.

Last edited by jamesdurham; March 15th, 2009 at 12:16 PM..
 
Old March 15th, 2009, 12:25 PM
Authorized User
 
Join Date: Mar 2009
Posts: 50
Thanks: 7
Thanked 0 Times in 0 Posts
Default closer...but not quite

Code:
<xsl:for-each select="$groundLayers">
<path.....>
            <xsl:attribute name="d">
              <xsl:for-each select=".">
                <xsl:sort select="xs:double(distanceGL)" order="descending"/>
                <xsl:text>M</xsl:text>
                <xsl:value-of select="$distance - distanceGL[1]"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="$height - altitudeGL[1] + layerTopDepth[1]"/>
              </xsl:for-each>
              <xsl:text> L </xsl:text>
              <xsl:for-each select=".">
                <xsl:sort select="xs:double(distanceGL)" order="descending"/>
                <xsl:value-of
                  select="concat($distance - distanceGL[1], ' ', $height - altitudeGL[1] + layerTopDepth[1])"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>, </xsl:text>
              <xsl:for-each select=".">
                <xsl:sort select="xs:double(distanceGL)" order="ascending"/>
                <xsl:value-of
                  select="concat($distance - distanceGL[1], ' ', $height - altitudeGL[1] + layerBaseDepth[1])"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>z</xsl:text>
            </xsl:attribute>
          </path>
</for-each>
Ok so now this prints out 3paths (good) that have d attributes of:
d="M0 0 L 0 0, 0 400z
d="M0 400 L 0 400, 0 550z"
d="M0 550 L 0 550, 0 750z"

That's both good and bad. In the code I put in the predicate [1] in order to use the information that's been sorted and to pick out the first value. This is correct. However, I obviously only want this first value restriction for the term after 'M'...after 'L' I want them all to be listed. The problem is that when I take out the [1] for those cases, it doesn't work as I get the error that more than one value is being taken and it can't handle the string. I guess I need to sort something differently or change the for-each?
 
Old March 15th, 2009, 01:42 PM
Friend of Wrox
 
Join Date: Nov 2007
Posts: 1,243
Thanks: 0
Thanked 245 Times in 244 Posts
Default

Doing
Code:
<xsl:for-each select="$groundLayers">
  <xsl:for-each select=".">
does not achieve anything meaningful as the inner for-each has nothing but a single context node of the outer for-each to process.
The outer for-each select="$groundLayers" processes the 'layers' elements, I am not sure what you want to process with the inner for-each.
__________________
Martin Honnen
Microsoft MVP (XML, Data Platform Development) 2005/04 - 2013/03
My blog
 
Old March 15th, 2009, 01:53 PM
Authorized User
 
Join Date: Mar 2009
Posts: 50
Thanks: 7
Thanked 0 Times in 0 Posts
Default

I see what you mean and realise that.

My problem is that unless i specify a predicate of [1] for things like distanceGL etc then it can only see a string of numbers all held by each. So for example:

<distanceGL>1003 640 429 102</distanceGL>
<altitudeGL>819 819 819 819</altitudeGL>

these are the values held in these two. <distanceGL> helps to plot the x axis distance through equation ($distance - distanceGL) and <altitudeGL> helps to plot the y axis distance through the equation ($height - altitudeGL + layerTopDepth). (Or layerBaseDepth instead of layerTopDepth.)

Therefore the inner loops are trying to cycle through picking up each value at a certain point along the chain. So first of all it will pick up 1003,819 (from those two above) and then 640,819 etc.

The first part of the path only requires the first loop around, hence the predicate [1].

Does this make sense?


edit: the inner for-each loops are required so that the 'sort' order can be changed from descending distanceGL to ascending distanceGL once it exhausts that cycle.

Last edited by jamesdurham; March 15th, 2009 at 02:13 PM.. Reason: more info added
 
Old March 15th, 2009, 02:07 PM
Authorized User
 
Join Date: Mar 2009
Posts: 50
Thanks: 7
Thanked 0 Times in 0 Posts
Default This may illustrate it better

Code:
<xsl:for-each select="$groundLayers">
        <path....>
            <xsl:attribute name="d">
              <xsl:for-each select=".">
                <xsl:sort select="xs:double(distanceGL)" order="descending"/>
                <xsl:text>M</xsl:text>
                <xsl:value-of select="$distance - distanceGL[1]"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="$height - altitudeGL[1] + layerTopDepth[1]"/>
              </xsl:for-each>
              <xsl:text> L </xsl:text>
              <xsl:for-each select=".">
                <xsl:sort select="xs:double(distanceGL)" order="descending"/>
                <xsl:value-of
                  select="concat($distance - distanceGL[1], ' ', $height - altitudeGL[1] + layerTopDepth[1])"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>, </xsl:text>
              <xsl:for-each select=".">
                <xsl:sort select="xs:double(distanceGL)" order="descending"/>
                <xsl:value-of
                  select="concat($distance - distanceGL[2], ' ', $height - altitudeGL[2] + layerTopDepth[2])"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>, </xsl:text>
              <xsl:for-each select=".">
                <xsl:sort select="xs:double(distanceGL)" order="ascending"/>
                <xsl:value-of
                  select="concat($distance - distanceGL[1], ' ', $height - altitudeGL[1] + layerBaseDepth[1])"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>z</xsl:text>
            </xsl:attribute>
          </path>
Here I have put the predicate of [2] in to the second inner for-each loop.

Now for [1] I get the values I wish to get, and for [2] I get the next set of values I wish to get. I could populate the correct paths by this method however in a real situation you need it to apply for any number of terms and not by putting in [x] values. I need a way (other than for the top inner loop) for the other inner for-each loops to populate the path list by picking out the values. At the moment, if i delete the [x] values then it doesn't pick any out.

edit: The bold part now shows how the values should populate. I am restricting each with an [x] value for showing you..but I need it to perform that loop across as many values as it needs to, without me adding more loops and restraints. (And it needs to do the same again for the bottom part - which is the same but has a different sort order.) Sorry if I'm repeating alot..I'm not sure how easy it is to understand me!

edit: so basically if i take the restraints off (i.e [x] values) then it doesn't seem to know which values to take from the loop and therefore it returns an error or a blank section. So there needs to be another for-each method or sorting method, or something like that on the inner for-each's.

Last edited by jamesdurham; March 15th, 2009 at 02:18 PM..
 
Old March 15th, 2009, 02:26 PM
Friend of Wrox
 
Join Date: Nov 2007
Posts: 1,243
Thanks: 0
Thanked 245 Times in 244 Posts
Default

Maybe you should generate separate distanceGL, altitudeGL elements where each contains only one number, then you could iterate over them e.g.
Code:
<xsl:for-each select="distanceGL">
  <xsl:variable name="pos" select="position()"/>
  <xsl:value-of select="concat($distance - ., ' ', $height - ../altitudeGL[$pos] + ../layerTopDepth[$pos]"/>
__________________
Martin Honnen
Microsoft MVP (XML, Data Platform Development) 2005/04 - 2013/03
My blog
 
Old March 15th, 2009, 02:45 PM
Authorized User
 
Join Date: Mar 2009
Posts: 50
Thanks: 7
Thanked 0 Times in 0 Posts
Default

I've just implemented what you said (or so i think!). It gives an output that seems to function as it should, however the values aren't quite correct and the paths drawn are therefore very odd looking! I'm trying to figure out exactly what it's drawn!

Code:
<xsl:for-each select="$groundLayers">
      <path.....>
            <xsl:attribute name="d">
              <xsl:for-each select=".">
                <xsl:sort select="xs:double(distanceGL)" order="descending"/>
                <xsl:text>M</xsl:text>
                <xsl:value-of select="$distance - distanceGL[1]"/>
                <xsl:text> </xsl:text>
                <xsl:value-of select="$height - altitudeGL[1] + layerTopDepth[1]"/>
              </xsl:for-each>
              <xsl:text> L </xsl:text>
              <xsl:for-each select="distanceGL">
                <xsl:sort select="xs:double(.)" order="descending"/>
                <xsl:variable name="posa" select="position()" />
                <xsl:value-of
                  select="concat($distance - ., ' ', $height - ../altitudeGL[$posa] + ../layerTopDepth[$posa])"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>, </xsl:text>
              <xsl:for-each select="distanceGL">
                <xsl:sort select="xs:double(.)" order="ascending"/>
                <xsl:variable name="posb" select="position()" />
                <xsl:value-of
                  select="concat($distance - ., ' ', $height - ../altitudeGL[$posb] + ../layerBaseDepth[$posb])"/>
                <xsl:if test="position() != last()">
                  <xsl:text>, </xsl:text>
                </xsl:if>
              </xsl:for-each>
              <xsl:text>z</xsl:text>
            </xsl:attribute>
          </path>
Can you see anything there that might be wrong?

an example path output it gave is:

d="M0 400 L 0 400, 363 150, 363 550, 0 150z

That one should probably be:
d="M0 400 L 0 400, 363 449, 363 449, 0 550z

So they have the same number of points...it must be either picking out the incorrect values from the lists (which are starting to confuse me even!) or a calculation is wrong (which it shouldn't be because these calcs have worked for the previous version before the XML code change).

edit: So it's the y coordinate that's out when you look at the comparison. That means that the calculation for x ($distance - .) is correct but for y ($height - ../altitudeGL[$posa] + ../layerTopDepth[$posa]) is incorrect. Can you spot a mistake there because I can't!

Last edited by jamesdurham; March 15th, 2009 at 02:50 PM..





Similar Threads
Thread Thread Starter Forum Replies Last Post
Can anyone give me some sample data? kinzlaw BOOK: Beginning Visual Basic 2005 Databases ISBN: 978-0-7645-8894-5 7 June 19th, 2007 05:04 AM
Implementing the all-path shortest path problem bitwords XSLT 1 December 6th, 2006 11:37 AM
SVG viewer 3.03 hyperlink problem gps Ajax 0 August 9th, 2006 11:01 AM
pls give the query for XML data in Sqlserver2005 veeruu SQL Server 2005 0 July 27th, 2006 05:07 AM
pls give query to diplay XML data in Sqlserver2005 veeruu XML 0 July 27th, 2006 05:06 AM





Powered by vBulletin®
Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
Copyright (c) 2020 John Wiley & Sons, Inc.