[XSL-LIST Mailing List Archive Home] [By Thread] [By Date] [Recent Entries] [Reply To This Message]

SelectingSubsetsOfNode-SetsByPositionIntervals

Subject: SelectingSubsetsOfNode-SetsByPositionIntervals
From: mankar@xxxxxxxxxxxxxxx
Date: Fri, 6 Aug 2004 17:24:07 +0300
 SelectingSubsetsOfNode-SetsByPositionIntervals
Hallo, after getting a lot of help from the xsl-list it became possible for
this xml source doc:

<?xml version="1.0" encoding="ISO-8859-7"?>
<ROWSET>
      <ROW num="1">
            <SHAPE>
                  <ELEM_INFO>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1003</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>6</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1003</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                  </ELEM_INFO>
                  <ORDINATES>
                        <ORDINATES_ITEM>483639.599589384</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314480.8582032</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483653.418277397</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314497.09551522</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483696.866709438</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314548.14836326</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483639.599589384</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314480.8582032</ORDINATES_ITEM>
                  </ORDINATES>
            </SHAPE>
      </ROW>
      <ROW num="2">
            <SHAPE>
                  <ELEM_INFO>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1003</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>5</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>2003</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>13</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>2003</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                  </ELEM_INFO>
                  <ORDINATES>
                        <ORDINATES_ITEM>483168.460580946</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314454.74669918</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483171.116692948</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314465.79279519</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483183.52147696</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314517.37383524</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483203.420852978</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314600.12101931</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483204.637028979</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314605.17829932</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483168.460580946</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314454.74669918</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483198.743348974</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314725.56217143</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483198.594772974</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314728.70069943</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483192.709572968</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314852.93913155</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483198.743348974</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314725.56217143</ORDINATES_ITEM>
                  </ORDINATES>
            </SHAPE>
      </ROW>
</ROWSET>

 to be transformed with the use of the following stylesheet:

<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
      <xsl:output indent="yes"/>
      <xsl:template match="/">
      <PolygonSet>
      <xsl:for-each select="ROWSET/ROW">
      <polygon>
                  <xsl:for-each select="SHAPE/ORDINATES/ORDINATES_ITEM">
                        <xsl:choose>
                              <xsl:when test="position()  =
ancestor::SHAPE/ELEM_INFO/ELEM_INFO_ITEM[position() mod 3=1]">
                                    <xsl:value-of select="concat('M',.)"/>
                                    <xsl:text> </xsl:text>
                              </xsl:when>
                              <xsl:otherwise>
                                    <xsl:value-of select="."/>
                                    <xsl:text> </xsl:text>
                              </xsl:otherwise>
                        </xsl:choose>
                  </xsl:for-each>
            </polygon>
            </xsl:for-each>
            </PolygonSet>
      </xsl:template>
</xsl:stylesheet>

into the following xml output:

<?xml version="1.0" encoding="UTF-8"?>
<PolygonSet>
      <polygon>M483639.599589384 4314480.8582032 483653.418277397
4314497.09551522 483696.866709438 M4314548.14836326 483639.599589384
4314480.8582032 </polygon>
      <polygon>M483168.460580946 4314454.74669918 483171.116692948
4314465.79279519 483183.52147696 4314517.37383524 483203.420852978
4314600.12101931 483204.637028979 4314605.17829932 483168.460580946
4314454.74669918 M483198.743348974 4314725.56217143 483198.594772974
4314728.70069943 483192.709572968 4314852.93913155 483198.743348974
4314725.56217143 </polygon>
      <polygon>M483168.460580946 4314454.74669918 M483171.116692948
4314465.79279519 483183.52147696 4314517.37383524 483203.420852978
4314600.12101931 483204.637028979 4314605.17829932 483168.460580946
4314454.74669918 483198.743348974 4314725.56217143 483198.594772974
4314728.70069943 483192.709572968 4314852.93913155 483198.743348974
4314725.56217143 </polygon>
</PolygonSet>


which selects all ORDINATE_ITEM elements of each ROW/SHAPE as string
content of a polygon element,adding an M character at the same time to the
content of ORDINATE_ITEM elements whose position is denoted by the
ELEM_INFO_ITEM[position()mod 3=1] content for each ROW/SHAPE.

I was wondering if it is also possible to select subsets of the
ORDINATE_ITEM node-set of each SHAPE by using these positions declared by
ELEM_INFO_ITEM[position()mod 3=1].I mean for example, for the fisrt
ROW/SHAPE of the source XML, using this XPath syntax i get to select
ORDINATE_ITEM elements whose position is 1 and 6.
<ROW num="1">
            <SHAPE>
                  <ELEM_INFO>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1003</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>

                        <ELEM_INFO_ITEM>6</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1003</ELEM_INFO_ITEM>
                        <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
                  </ELEM_INFO>
                  <ORDINATES>
                        <ORDINATES_ITEM>483639.599589384</ORDINATES_ITEM>
1st position
                        <ORDINATES_ITEM>4314480.8582032</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483653.418277397</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314497.09551522</ORDINATES_ITEM>
                        <ORDINATES_ITEM>483696.866709438</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314548.14836326</ORDINATES_ITEM>
6th position
                        <ORDINATES_ITEM>483639.599589384</ORDINATES_ITEM>
                        <ORDINATES_ITEM>4314480.8582032</ORDINATES_ITEM>

Can i also use this XPath syntax to define position intervals (1-5) and
(6-last) and select all ORDINATE_ITEM elemets between these positions into
diferrent node-sets.To be more specific can i select all ORDINATE_ITEM
elements from position 1 to position 5 and then all all ORDINATE_ITEM
elements from position 6 to the last position?
Thanks

Regards
Manousos
Athens

Current Thread

PURCHASE STYLUS STUDIO ONLINE TODAY!

Purchasing Stylus Studio from our online shop is Easy, Secure and Value Priced!

Buy Stylus Studio Now

Download The World's Best XML IDE!

Accelerate XML development with our award-winning XML IDE - Download a free trial today!

Don't miss another message! Subscribe to this list today.
Email
First Name
Last Name
Company
Subscribe in XML format
RSS 2.0
Atom 0.3
Site Map | Privacy Policy | Terms of Use | Trademarks
Free Stylus Studio XML Training:
W3C Member
Stylus Studio® and DataDirect XQuery ™are products from DataDirect Technologies, is a registered trademark of Progress Software Corporation, in the U.S. and other countries. © 2004-2013 All Rights Reserved.