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

Re: Selecting the first node set

Subject: Re: Selecting the first node set
From: Abel Online <abel.online@xxxxxxxxx>
Date: Sat, 05 Aug 2006 14:09:07 +0200
descendant or self 1 deep
Hi Fraser,

What you probably want is this ( * will return the first node with any name):
/Trade/*/Value/enum


Or, more specific, this (specifying that you only want the first unknown node):
/Trade/*[1]/Value/enum


Both return
/Trade[1]/UnknownName1[1]/Value[1]/enum[1] - A
/Trade[1]/UnknownName1[1]/Value[1]/enum[2] - B
/Trade[1]/UnknownName1[1]/Value[1]/enum[3] - C

If you only want the parent, you can, of course, do this (will return one node):
/Trade/*[1]/Value


>> /Trade//Value - returns all 3 <Value> nodes
Correct, // means "descendant or self", does not matter how deep, it will return any Value node 'under or on' "Trade"


>> /Trade//Value[1] - also returns all 3 <Value> nodes (why is that ?)
Correct, again "descendant or self". In this case, it is 'self' that is returned, because 'self' is the first node under 'UnknownNode' each time.


>> /Trade//Value[2] - returns nothing (why is that ?)
There is no second node under 'UnknownNode'. If this were your input document, itreturn something:
<Trade>
<UnknownName1>
<Value>
<enum>A</enum>
<enum>B</enum>
</Value>
<Value>
<enum>C</enum>
</Value>
</UnknownName1>
</Trade>


HtH,

Cheers,
Abel Braaksma
www.nuntia.nl



Fraser Goffin wrote:

Given the following simplified XML instance, can anyone suggest an expression that will return ONLY the 'Value' node containing <enum> children with values A, B and C. I can't rely on the name of the parent node of <Value> hence I have deliberately named these as UnknownNameX or any other intervening structure.

<Trade>
    <UnknownName1>
        <Value>
            <enum>A</enum>
            <enum>B</enum>
            <enum>C</enum>
        </Value>
    </UnknownName1>
    <UnknownName2>
        <Value>/Trade//Value[ancestor::Trade]</Value>
    </UnknownName2>
    <Treatment>
        <UnknownName3>
            <Value>
                <enum>D</enum>
                <enum>E</enum>
                <enum>F</enum>
            </Value>
        </UnknownName3>
    </Treatment>
</Trade>


/Trade//Value - returns all 3 <Value> nodes /Trade//Value[1] - also returns all 3 <Value> nodes (why is that ?) /Trade//Value[2] - returns nothing (why is that ?)

Cheers

Fraser.

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-2011 All Rights Reserved.