|
Subject: RE: [xsl] passing_cousin_content_as_counter From: "Michael Kay" <mhk@xxxxxxxxx> Date: Sun, 1 Aug 2004 13:55:37 +0100 |
> I was wondering if someone could, by the use of one
> stylesheet, select the
> values of the first,
> the fourth and the seventh <ELEM_INFO_ITEM> children of <ELEM_INFO>
> element. Note that the number
> of <ELEM_INFO_ITEM> nodes is not predefined.In this example there are
> exactly nine nodes, but
> in other cases there might be only three or twelve etch, but
> always number
> that is multiple of
> three.
If there are 12, do you want to select (1,4,7), or (1,4,7,10)? I imagine the
latter. Then the answer is
select="ELEM_INFO_ITEM[position() mod 3 = 0]
>
> I then would like to use the extracted values as counter
> values, to apply
> counting on
> the COORDINATE_ITEM node-set and select specific COORDINATE_ITEM
> elements.In this example, based
> on the extracted values (1, 7 and 11 ), i would like to
> select the first,
> seventh and eleventh
> COORDINATE_ITEM elements content.
Then you do
<xsl:for-each select="/SHAPE/ELEM_INFO/ELEM_INFO_ITEM[position() mod 3 =
0]">
<xsl:value-of select="/SHAPE/COORDINATES_ITEM[number(current())]"/>
>
> The source xml is the one following:
>
>
> <SHAPE>
> - <ELEM_INFO>
> <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>1001</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>5000</ELEM_INFO_ITEM>
>
> <ELEM_INFO_ITEM>7</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>1002</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>5000</ELEM_INFO_ITEM>
>
> <ELEM_INFO_ITEM>11</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>1003</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>5000</ELEM_INFO_ITEM>
> </ELEM_INFO>
> - <COORDINATES>
> <COORDINATES_ITEM>68</COORDINATES_ITEM> !first
> <COORDINATES_ITEM>54</COORDINATES_ITEM>
> <COORDINATES_ITEM>72/COORDINATES_ITEM>
> <COORDINATES_ITEM>65</COORDINATES_ITEM>
> <COORDINATES_ITEM>83</COORDINATES_ITEM>
> <COORDINATES_ITEM>17</COORDINATES_ITEM>
> <COORDINATES_ITEM>20</COORDINATES_ITEM> !seventh
> <COORDINATES_ITEM>60</COORDINATES_ITEM>
> <COORDINATES_ITEM>24</COORDINATES_ITEM>
> <COORDINATES_ITEM>55</COORDINATES_ITEM>
> <COORDINATES_ITEM>98</COORDINATES_ITEM> !eleventh
> <COORDINATES_ITEM>25</COORDINATES_ITEM>
> <COORDINATES>
> </SHAPE>
>
>
> Can this be achieved with the use of one and only
> stylesheet??The output i
> want to generate
> should be identical with the source, except for that the selected
> COORDINATE_ITEM elements
> will also contain a character like d for example,
> concatenated with their
> number value.
This inverts the logic but it is still possible. Use an identity template:
<xsl:template match="*">
<xsl:copy><xsl:copy-of select="@*"/><xsl:apply-templates/></xsl:copy>
</xsl:template>
together with a template that alters the relevant COORDINATES_ITEM elements:
<xsl:template match="COORDINATES_ITEM[position() =
/SHAPE/ELEM_INFO/ELEM_INFO_ITEM[position() mod 3 = 0]]">
<xsl:copy>
<xsl:text>d</xsl:text>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
Not tested.
(If you don't understand the predicate in this template rule, look up the
XPath 1.0 rules for comparing a number with a node-set)
Michael Kay
That
> last thing is very easy with the use of concat, but what
> about the previous
> issues.They look
> quite heavy programmaticaly for xslt. Should i use variables??
>
>
> output xml
>
>
> <SHAPE>
> - <ELEM_INFO>
> <ELEM_INFO_ITEM>1</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>1001</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>5000</ELEM_INFO_ITEM>
>
> <ELEM_INFO_ITEM>7</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>1002</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>5000</ELEM_INFO_ITEM>
>
> <ELEM_INFO_ITEM>11</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>1003</ELEM_INFO_ITEM>
> <ELEM_INFO_ITEM>5000</ELEM_INFO_ITEM>
> </ELEM_INFO>
> - <COORDINATES>
> <COORDINATES_ITEM>d68</COORDINATES_ITEM> !first
> <COORDINATES_ITEM>54</COORDINATES_ITEM>
> <COORDINATES_ITEM>72/COORDINATES_ITEM>
> <COORDINATES_ITEM>65</COORDINATES_ITEM>
> <COORDINATES_ITEM>83</COORDINATES_ITEM>
> <COORDINATES_ITEM>17</COORDINATES_ITEM>
> <COORDINATES_ITEM>d20</COORDINATES_ITEM> !seventh
> <COORDINATES_ITEM>60</COORDINATES_ITEM>
> <COORDINATES_ITEM>24</COORDINATES_ITEM>
> <COORDINATES_ITEM>55</COORDINATES_ITEM>
> <COORDINATES_ITEM>d98</COORDINATES_ITEM> !eleventh
> <COORDINATES_ITEM>25</COORDINATES_ITEM>
> <COORDINATES>
> </SHAPE>
>
>
> Regards
> Manousos
> Athens
| Current Thread |
|---|
|
| <- Previous | Index | Next -> |
|---|---|---|
| RE: [xsl] RE: unwanted and non pref, Michael Kay | Thread | RE: [xsl] passing_cousin_content_as, mankar |
| RE: [xsl] RE: unwanted and non pref, Michael Kay | Date | [xsl] Writing out to and reading ba, Chris Loschen |
| Month |