XPath / XSLT to extract 'overloaded' attribute

Discussion in 'XML' started by Iain, Nov 29, 2003.

  1. Iain

    Iain Guest

    I want to create an XML configuration file which might look like

    <REGION Name="Europe" WingDing="Blue">
    <COUNTRY Name="UK" WingDing="white">
    <TOWN Name="London" WingDing="Orange" />
    </COUNTRY>
    </REGION>
    <REGION Name="NorthAmerica" WingDing="Yellow">
    <COUNTRY Name="Canada">
    <TOWN Name="Quebec" WingDing="Brown" />
    <TOWN Name="Ontario" />
    </COUNTRY>
    </REGION>

    Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and create an
    XML Node with the values in that node PLUS any other values in nodes higher
    up.

    Specifically for any attribute I should pick the lowest occuring value.
    Quebec would have a WIngDing of Yellow ('inheriting' from the Region node),
    Quebec, Brown and London Orange.

    Finding the node is easy with XPath, but I'm unsure how to pick the lowest
    occuring attribute value, some kind of max(depth) operator would be required
    and I do not seem to find one int my reference books. This sort of thing
    can often be done with a chain of ifs, but it is inelegant.

    Can any one make any suggestions?

    thanks in advance

    Iain
     
    Iain, Nov 29, 2003
    #1
    1. Advertising

  2. I am sorry, but it is not clear what you want to achieve -- can you provide
    a complete example and explantion?

    I find this text quite contradictory:

    > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and create

    an
    > XML Node with the values in that node PLUS any other values in nodes

    higher
    > up.
    >
    > Specifically for any attribute I should pick the lowest occuring value.
    > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    node),
    > Quebec, Brown and London Orange.
    >



    First you are speaking about NorthAmerica/Canada/Ontario , but then you
    start speaking about Quebec ... ???

    What is the meaning of this:

    > Specifically for any attribute I should pick the lowest occuring value.
    > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    node),
    > Quebec, Brown and London Orange.
    >



    =====
    Cheers,

    Dimitre Novatchev.
    http://fxsl.sourceforge.net/ -- the home of FXSL


    "Iain" <> wrote in message
    news:dHZxb.225$...
    > I want to create an XML configuration file which might look like
    >
    > <REGION Name="Europe" WingDing="Blue">
    > <COUNTRY Name="UK" WingDing="white">
    > <TOWN Name="London" WingDing="Orange" />
    > </COUNTRY>
    > </REGION>
    > <REGION Name="NorthAmerica" WingDing="Yellow">
    > <COUNTRY Name="Canada">
    > <TOWN Name="Quebec" WingDing="Brown" />
    > <TOWN Name="Ontario" />
    > </COUNTRY>
    > </REGION>
    >
    > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and create

    an
    > XML Node with the values in that node PLUS any other values in nodes

    higher
    > up.
    >
    > Specifically for any attribute I should pick the lowest occuring value.
    > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    node),
    > Quebec, Brown and London Orange.
    >
    > Finding the node is easy with XPath, but I'm unsure how to pick the lowest
    > occuring attribute value, some kind of max(depth) operator would be

    required
    > and I do not seem to find one int my reference books. This sort of thing
    > can often be done with a chain of ifs, but it is inelegant.
    >
    > Can any one make any suggestions?
    >
    > thanks in advance
    >
    > Iain
    >
    >
     
    Dimitre Novatchev, Nov 29, 2003
    #2
    1. Advertising

  3. Iain wrote:
    > I want to create an XML configuration file which might look like
    >
    > <REGION Name="Europe" WingDing="Blue">
    > <COUNTRY Name="UK" WingDing="white">
    > <TOWN Name="London" WingDing="Orange" />
    > </COUNTRY>
    > </REGION>
    > <REGION Name="NorthAmerica" WingDing="Yellow">
    > <COUNTRY Name="Canada">
    > <TOWN Name="Quebec" WingDing="Brown" />
    > <TOWN Name="Ontario" />
    > </COUNTRY>
    > </REGION>
    >
    > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and create an
    > XML Node with the values in that node PLUS any other values in nodes higher
    > up.
    >
    > Specifically for any attribute I should pick the lowest occuring value.
    > Quebec would have a WIngDing of Yellow ('inheriting' from the Region node),
    > Quebec, Brown and London Orange.
    >
    > Finding the node is easy with XPath, but I'm unsure how to pick the lowest
    > occuring attribute value, some kind of max(depth) operator would be required
    > and I do not seem to find one int my reference books. This sort of thing
    > can often be done with a chain of ifs, but it is inelegant.
    >
    > Can any one make any suggestions?


    ancestor-or-self::*/@WindDing

    may be what you're after. BTW: I'd call that "inheritance" rather than
    "overloading".
     
    Julian Reschke, Nov 29, 2003
    #3
  4. Iain

    Iain Guest

    I'm sorry if this is not clear.

    I intended to indicate a configuration file with an hierarchical set of
    nodes whereby TOWN was found in COUNTRY was found in REGION.

    Towns at the bottom level in my example had names like Ontario, Quebec and
    London.

    Each town has a property (just made up as on example) called WingDing which
    contains the name of a colour.

    It is may aim that the WingDing property can be applied at any level as a
    kind of default. SO if there is a 'WingDing' property set at a REGION level
    then it will apply to all TOWNs in all COUNTRYs in that region unless
    over-ridden at a COUNTRY or TOWN level.

    What I want to do is to effectively find any give TOWN and a full set of
    properties for that town regardless of if the property is set in the TOWN
    node or the higher level COUNTRY or REGION node containing it.

    My expectation was that I could do this using XSLT to find the node with an
    XPath search and then to populate it with a known set of properties which
    were present in that node or in a containing node.

    I have never used XSLT (or much XPath) and it seemed that I could see
    complex hard to maintain approaches, but rather hoped there was an elegant
    approach which I had missed. Hence I threw myself on the mercy of the list!

    Obviously in my real world applicaitons there could be many levels of
    nesting of the nodes dozens or hundreds of different isntances at any level
    and many attributes.

    I would also be interested in applying the same techniques to elements, but
    I imagine that solving the attribute case solves the element case too.

    I hope this makes a bit more sense.

    One of the actual applications is for a text formatting application where I
    wish to be able to set a font at the top level of a set of XML based object
    descriptions and override it in sub areas, panels, and specific text
    instances. Holding the font in all places where it may be (for a complex
    description) would be cumbersome and hard to maintain (the specific
    application is to provide a layout template which I would wish to maintain
    manually - requiring a font object in all bottom level text descriptions
    would make for a lot of typing).

    Iain
    "Dimitre Novatchev" <> wrote in message
    news:bqa0i0$1ug329$-berlin.de...
    > I am sorry, but it is not clear what you want to achieve -- can you

    provide
    > a complete example and explantion?
    >
    > I find this text quite contradictory:
    >
    > > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and create

    > an
    > > XML Node with the values in that node PLUS any other values in nodes

    > higher
    > > up.
    > >
    > > Specifically for any attribute I should pick the lowest occuring value.
    > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    > node),
    > > Quebec, Brown and London Orange.
    > >

    >
    >
    > First you are speaking about NorthAmerica/Canada/Ontario , but then you
    > start speaking about Quebec ... ???
    >
    > What is the meaning of this:
    >
    > > Specifically for any attribute I should pick the lowest occuring value.
    > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    > node),
    > > Quebec, Brown and London Orange.
    > >

    >
    >
    > =====
    > Cheers,
    >
    > Dimitre Novatchev.
    > http://fxsl.sourceforge.net/ -- the home of FXSL
    >
    >
    > "Iain" <> wrote in message
    > news:dHZxb.225$...
    > > I want to create an XML configuration file which might look like
    > >
    > > <REGION Name="Europe" WingDing="Blue">
    > > <COUNTRY Name="UK" WingDing="white">
    > > <TOWN Name="London" WingDing="Orange" />
    > > </COUNTRY>
    > > </REGION>
    > > <REGION Name="NorthAmerica" WingDing="Yellow">
    > > <COUNTRY Name="Canada">
    > > <TOWN Name="Quebec" WingDing="Brown" />
    > > <TOWN Name="Ontario" />
    > > </COUNTRY>
    > > </REGION>
    > >
    > > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and create

    > an
    > > XML Node with the values in that node PLUS any other values in nodes

    > higher
    > > up.
    > >
    > > Specifically for any attribute I should pick the lowest occuring value.
    > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    > node),
    > > Quebec, Brown and London Orange.
    > >
    > > Finding the node is easy with XPath, but I'm unsure how to pick the

    lowest
    > > occuring attribute value, some kind of max(depth) operator would be

    > required
    > > and I do not seem to find one int my reference books. This sort of

    thing
    > > can often be done with a chain of ifs, but it is inelegant.
    > >
    > > Can any one make any suggestions?
    > >
    > > thanks in advance
    > >
    > > Iain
    > >
    > >

    >
    >
     
    Iain, Nov 29, 2003
    #4
  5. I understand.

    As Julian has pointed out, the following XPath expression provides the
    attribute of the first ancestor (or self, if no ancestor has such attribute)
    in document order:

    ancestor-or-self::*/@WindDing

    So, if a node does not have a "WindDing" attribute, it should inherit it
    from the earliest ancestor that has it ?

    Or, will this node inherit the attribute from the nearest ancestor ?

    In case a node already has such-named attribute specified, then it should
    not inherit from its ancestors ?


    =====
    Cheers,

    Dimitre Novatchev.
    http://fxsl.sourceforge.net/ -- the home of FXSL



    "Iain" <> wrote in message
    news:cb7yb.433$...
    > I'm sorry if this is not clear.
    >
    > I intended to indicate a configuration file with an hierarchical set of
    > nodes whereby TOWN was found in COUNTRY was found in REGION.
    >
    > Towns at the bottom level in my example had names like Ontario, Quebec and
    > London.
    >
    > Each town has a property (just made up as on example) called WingDing

    which
    > contains the name of a colour.
    >
    > It is may aim that the WingDing property can be applied at any level as a
    > kind of default. SO if there is a 'WingDing' property set at a REGION

    level
    > then it will apply to all TOWNs in all COUNTRYs in that region unless
    > over-ridden at a COUNTRY or TOWN level.
    >
    > What I want to do is to effectively find any give TOWN and a full set of
    > properties for that town regardless of if the property is set in the TOWN
    > node or the higher level COUNTRY or REGION node containing it.
    >
    > My expectation was that I could do this using XSLT to find the node with

    an
    > XPath search and then to populate it with a known set of properties which
    > were present in that node or in a containing node.
    >
    > I have never used XSLT (or much XPath) and it seemed that I could see
    > complex hard to maintain approaches, but rather hoped there was an elegant
    > approach which I had missed. Hence I threw myself on the mercy of the

    list!
    >
    > Obviously in my real world applicaitons there could be many levels of
    > nesting of the nodes dozens or hundreds of different isntances at any

    level
    > and many attributes.
    >
    > I would also be interested in applying the same techniques to elements,

    but
    > I imagine that solving the attribute case solves the element case too.
    >
    > I hope this makes a bit more sense.
    >
    > One of the actual applications is for a text formatting application where

    I
    > wish to be able to set a font at the top level of a set of XML based

    object
    > descriptions and override it in sub areas, panels, and specific text
    > instances. Holding the font in all places where it may be (for a complex
    > description) would be cumbersome and hard to maintain (the specific
    > application is to provide a layout template which I would wish to maintain
    > manually - requiring a font object in all bottom level text descriptions
    > would make for a lot of typing).
    >
    > Iain
    > "Dimitre Novatchev" <> wrote in message
    > news:bqa0i0$1ug329$-berlin.de...
    > > I am sorry, but it is not clear what you want to achieve -- can you

    > provide
    > > a complete example and explantion?
    > >
    > > I find this text quite contradictory:
    > >
    > > > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and

    create
    > > an
    > > > XML Node with the values in that node PLUS any other values in nodes

    > > higher
    > > > up.
    > > >
    > > > Specifically for any attribute I should pick the lowest occuring

    value.
    > > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    > > node),
    > > > Quebec, Brown and London Orange.
    > > >

    > >
    > >
    > > First you are speaking about NorthAmerica/Canada/Ontario , but then you
    > > start speaking about Quebec ... ???
    > >
    > > What is the meaning of this:
    > >
    > > > Specifically for any attribute I should pick the lowest occuring

    value.
    > > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    > > node),
    > > > Quebec, Brown and London Orange.
    > > >

    > >
    > >
    > > =====
    > > Cheers,
    > >
    > > Dimitre Novatchev.
    > > http://fxsl.sourceforge.net/ -- the home of FXSL
    > >
    > >
    > > "Iain" <> wrote in message
    > > news:dHZxb.225$...
    > > > I want to create an XML configuration file which might look like
    > > >
    > > > <REGION Name="Europe" WingDing="Blue">
    > > > <COUNTRY Name="UK" WingDing="white">
    > > > <TOWN Name="London" WingDing="Orange" />
    > > > </COUNTRY>
    > > > </REGION>
    > > > <REGION Name="NorthAmerica" WingDing="Yellow">
    > > > <COUNTRY Name="Canada">
    > > > <TOWN Name="Quebec" WingDing="Brown" />
    > > > <TOWN Name="Ontario" />
    > > > </COUNTRY>
    > > > </REGION>
    > > >
    > > > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and

    create
    > > an
    > > > XML Node with the values in that node PLUS any other values in nodes

    > > higher
    > > > up.
    > > >
    > > > Specifically for any attribute I should pick the lowest occuring

    value.
    > > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region

    > > node),
    > > > Quebec, Brown and London Orange.
    > > >
    > > > Finding the node is easy with XPath, but I'm unsure how to pick the

    > lowest
    > > > occuring attribute value, some kind of max(depth) operator would be

    > > required
    > > > and I do not seem to find one int my reference books. This sort of

    > thing
    > > > can often be done with a chain of ifs, but it is inelegant.
    > > >
    > > > Can any one make any suggestions?
    > > >
    > > > thanks in advance
    > > >
    > > > Iain
    > > >
    > > >

    > >
    > >

    >
    >
     
    Dimitre Novatchev, Nov 29, 2003
    #5
  6. Iain

    Iain Guest

    Thanks, Dimitri, this looks like what I want. I shall try it out a bit
    later on.

    I didn't understand the reference to 'Julian' - I don't see an message form
    him in htis thread, or have I missed something!

    Iain
    "Dimitre Novatchev" <> wrote in message
    news:bqb2v9$1vujd9$-berlin.de...
    > I understand.
    >
    > As Julian has pointed out, the following XPath expression provides the
    > attribute of the first ancestor (or self, if no ancestor has such

    attribute)
    > in document order:
    >
    > ancestor-or-self::*/@WindDing
    >
    > So, if a node does not have a "WindDing" attribute, it should inherit it
    > from the earliest ancestor that has it ?
    >
    > Or, will this node inherit the attribute from the nearest ancestor ?
    >
    > In case a node already has such-named attribute specified, then it should
    > not inherit from its ancestors ?
    >
    >
    > =====
    > Cheers,
    >
    > Dimitre Novatchev.
    > http://fxsl.sourceforge.net/ -- the home of FXSL
    >
    >
    >
    > "Iain" <> wrote in message
    > news:cb7yb.433$...
    > > I'm sorry if this is not clear.
    > >
    > > I intended to indicate a configuration file with an hierarchical set of
    > > nodes whereby TOWN was found in COUNTRY was found in REGION.
    > >
    > > Towns at the bottom level in my example had names like Ontario, Quebec

    and
    > > London.
    > >
    > > Each town has a property (just made up as on example) called WingDing

    > which
    > > contains the name of a colour.
    > >
    > > It is may aim that the WingDing property can be applied at any level as

    a
    > > kind of default. SO if there is a 'WingDing' property set at a REGION

    > level
    > > then it will apply to all TOWNs in all COUNTRYs in that region unless
    > > over-ridden at a COUNTRY or TOWN level.
    > >
    > > What I want to do is to effectively find any give TOWN and a full set of
    > > properties for that town regardless of if the property is set in the

    TOWN
    > > node or the higher level COUNTRY or REGION node containing it.
    > >
    > > My expectation was that I could do this using XSLT to find the node with

    > an
    > > XPath search and then to populate it with a known set of properties

    which
    > > were present in that node or in a containing node.
    > >
    > > I have never used XSLT (or much XPath) and it seemed that I could see
    > > complex hard to maintain approaches, but rather hoped there was an

    elegant
    > > approach which I had missed. Hence I threw myself on the mercy of the

    > list!
    > >
    > > Obviously in my real world applicaitons there could be many levels of
    > > nesting of the nodes dozens or hundreds of different isntances at any

    > level
    > > and many attributes.
    > >
    > > I would also be interested in applying the same techniques to elements,

    > but
    > > I imagine that solving the attribute case solves the element case too.
    > >
    > > I hope this makes a bit more sense.
    > >
    > > One of the actual applications is for a text formatting application

    where
    > I
    > > wish to be able to set a font at the top level of a set of XML based

    > object
    > > descriptions and override it in sub areas, panels, and specific text
    > > instances. Holding the font in all places where it may be (for a

    complex
    > > description) would be cumbersome and hard to maintain (the specific
    > > application is to provide a layout template which I would wish to

    maintain
    > > manually - requiring a font object in all bottom level text descriptions
    > > would make for a lot of typing).
    > >
    > > Iain
    > > "Dimitre Novatchev" <> wrote in message
    > > news:bqa0i0$1ug329$-berlin.de...
    > > > I am sorry, but it is not clear what you want to achieve -- can you

    > > provide
    > > > a complete example and explantion?
    > > >
    > > > I find this text quite contradictory:
    > > >
    > > > > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and

    > create
    > > > an
    > > > > XML Node with the values in that node PLUS any other values in nodes
    > > > higher
    > > > > up.
    > > > >
    > > > > Specifically for any attribute I should pick the lowest occuring

    > value.
    > > > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region
    > > > node),
    > > > > Quebec, Brown and London Orange.
    > > > >
    > > >
    > > >
    > > > First you are speaking about NorthAmerica/Canada/Ontario , but then

    you
    > > > start speaking about Quebec ... ???
    > > >
    > > > What is the meaning of this:
    > > >
    > > > > Specifically for any attribute I should pick the lowest occuring

    > value.
    > > > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region
    > > > node),
    > > > > Quebec, Brown and London Orange.
    > > > >
    > > >
    > > >
    > > > =====
    > > > Cheers,
    > > >
    > > > Dimitre Novatchev.
    > > > http://fxsl.sourceforge.net/ -- the home of FXSL
    > > >
    > > >
    > > > "Iain" <> wrote in message
    > > > news:dHZxb.225$...
    > > > > I want to create an XML configuration file which might look like
    > > > >
    > > > > <REGION Name="Europe" WingDing="Blue">
    > > > > <COUNTRY Name="UK" WingDing="white">
    > > > > <TOWN Name="London" WingDing="Orange" />
    > > > > </COUNTRY>
    > > > > </REGION>
    > > > > <REGION Name="NorthAmerica" WingDing="Yellow">
    > > > > <COUNTRY Name="Canada">
    > > > > <TOWN Name="Quebec" WingDing="Brown" />
    > > > > <TOWN Name="Ontario" />
    > > > > </COUNTRY>
    > > > > </REGION>
    > > > >
    > > > > Then I want to find a node (E.g. NorthAmerica/Canada/Ontario) and

    > create
    > > > an
    > > > > XML Node with the values in that node PLUS any other values in nodes
    > > > higher
    > > > > up.
    > > > >
    > > > > Specifically for any attribute I should pick the lowest occuring

    > value.
    > > > > Quebec would have a WIngDing of Yellow ('inheriting' from the Region
    > > > node),
    > > > > Quebec, Brown and London Orange.
    > > > >
    > > > > Finding the node is easy with XPath, but I'm unsure how to pick the

    > > lowest
    > > > > occuring attribute value, some kind of max(depth) operator would be
    > > > required
    > > > > and I do not seem to find one int my reference books. This sort of

    > > thing
    > > > > can often be done with a chain of ifs, but it is inelegant.
    > > > >
    > > > > Can any one make any suggestions?
    > > > >
    > > > > thanks in advance
    > > > >
    > > > > Iain
    > > > >
    > > > >
    > > >
    > > >

    > >
    > >

    >
    >
     
    Iain, Nov 30, 2003
    #6
  7. "Iain" <> wrote in message
    news:pjiyb.24$...
    > Thanks, Dimitri, this looks like what I want. I shall try it out a bit
    > later on.
    >
    > I didn't understand the reference to 'Julian' - I don't see an message

    form
    > him in htis thread, or have I missed something!


    It is in the thread -- in case your newsreader does not show Julian's
    message, see it here:

    http://groups.google.com/groups?dq=...ie=UTF-8&oe=UTF-8&q=comp.text.xml&sa=N&tab=wg


    =====
    Cheers,

    Dimitre Novatchev.
    http://fxsl.sourceforge.net/ -- the home of FXSL
     
    Dimitre Novatchev, Nov 30, 2003
    #7
  8. Iain

    Iain Guest

    Thanks, Dimitre. I found julian in google, but not my newsreader (and
    thanks julian!)!

    I've been playing with ancestor-or-self and got something that seems to work
    for attributes.

    <xsl:copy-of select="ancestor-or-self::*/@ClipDirectory" />

    but when I try and make it work for elements I get stuck. this is meant to
    find the lowest MACHINE element which exists at or above the current node.

    <xsl:copy-of select="ancestor-or-self::*/Machine[last()]" />

    it returns all of them. I've tried various permutations which either return
    nothing at all or all elements (or refuse to run!).

    Hope you can help out here!

    thanks

    iain
     
    Iain, Dec 2, 2003
    #8
  9. In article <Ld9zb.1339$>,
    Iain <> wrote:

    % but when I try and make it work for elements I get stuck. this is meant to
    % find the lowest MACHINE element which exists at or above the current node.
    %
    % <xsl:copy-of select="ancestor-or-self::*/Machine[last()]" />

    would

    ancestor-or-self::*/Machine[not(descendant::Machine)]

    do what you want?

    In any case, one problem with your test is that last() is always going
    to be seen as true. Your test should be position() = last(). Having said
    that, it won't be testing what you want, because in that context, the
    position is the position in the document tree, not the position in the
    list of Machine nodes.

    You could get position() and last() to do what you want using xsl:for-each

    <xsl:for-each select="ancestor-or-self::*/Machine">
    <xsl:if test='position() = last()'>
    <xsl:copy-of select='.'/>
    </xsl:if>
    </xsl:for-each>
    --

    Patrick TJ McPhee
    East York Canada
     
    Patrick TJ McPhee, Dec 3, 2003
    #9
  10. Iain

    Iain Guest

    Thank you. The first suggestion, which I take it should find only those
    Machine elements who don't have descendents with Machine elements, did *not*
    work. I still got multiple results.

    The second suggestion using the for loop and test worked fine! I was kind
    of hoping that there was a neater way doing this, but, hey! it works.

    Iain

    "Patrick TJ McPhee" <> wrote in message
    news:bqjvh5$f0b$...
    > In article <Ld9zb.1339$>,
    > Iain <> wrote:
    >
    > % but when I try and make it work for elements I get stuck. this is meant

    to
    > % find the lowest MACHINE element which exists at or above the current

    node.
    > %
    > % <xsl:copy-of select="ancestor-or-self::*/Machine[last()]" />
    >
    > would
    >
    > ancestor-or-self::*/Machine[not(descendant::Machine)]
    >
    > do what you want?
    >
    > In any case, one problem with your test is that last() is always going
    > to be seen as true. Your test should be position() = last(). Having said
    > that, it won't be testing what you want, because in that context, the
    > position is the position in the document tree, not the position in the
    > list of Machine nodes.
    >
    > You could get position() and last() to do what you want using xsl:for-each
    >
    > <xsl:for-each select="ancestor-or-self::*/Machine">
    > <xsl:if test='position() = last()'>
    > <xsl:copy-of select='.'/>
    > </xsl:if>
    > </xsl:for-each>
    > --
    >
    > Patrick TJ McPhee
    > East York Canada
    >
     
    Iain, Dec 3, 2003
    #10
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Alastair Cameron
    Replies:
    1
    Views:
    7,479
    SQL Server Development Team [MSFT]
    Jul 8, 2003
  2. Vince C.
    Replies:
    4
    Views:
    2,812
    Vince C.
    Jul 27, 2003
  3. Bostonasian
    Replies:
    1
    Views:
    830
    Joris Gillis
    Sep 18, 2005
  4. Replies:
    2
    Views:
    1,091
    Henry S. Thompson
    Mar 6, 2006
  5. mark4asp
    Replies:
    3
    Views:
    1,110
    mark4asp
    Mar 4, 2008
Loading...

Share This Page