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

Re: Find the Position Index of Elements‏‏

Subject: Re: Find the Position Index of Elements‏‏
From: Alice Wei <elite.english@xxxxxxxxx>
Date: Sun, 13 Jun 2010 18:26:08 -0400
Re:  Find the Position Index of Elements‏‏
Right, I am not intending to use this in the xsl at all, and I am
trying to use this in VB.NET in ASP.
I am trying to come up with some way so I can figure out how to
extract the position node of the elements from my xml so I can use
them to use pagination.

I tried David's solution, and somehow that didn't work, it now gives
me this error on tokenizer issues, and I am not sure if what I trying
to do is even possible at all.

Alice

On Sun, Jun 13, 2010 at 6:14 PM, Philip Fearon <pgfearo@xxxxxxxxxxxxxx>
wrote:
> Though this is the xsl-list, you haven't mentioned XSLT, so this
> answer is just in case you wanted an XPath / .NET solution:
>
> XPath 1.0 as available natively in VB.NET can't return the sequence of
> atomic numbers you describe, it can only return a single value or a
> nodeset. If, however, you were using VB.NET with an XPath 2.0
> processor (such as Saxon.NET) you could simply use:
>
> for $rocksong in /music_songs/song[category = 'Rock'] return
> $rocksong/count(preceding-sibling::song) + 1
>
> Going back to XPath 1.0: you would first need to iterate through all
> the returned song elements returned by your expression and then, using
> another expression, evaluate the current song node position relative
> to previous song nodes:
>
> B  B  B  B  B  B count(./preceding-sibling::song)
>
> I've shown below sample code of how you would use the .NET
> XPathNavigator to work with the context node in this case. This sample
> is in C# but should be easy enough to convert to VB.Net.
>
> B  B  B  B  B  B XPathDocument xdoc = new
XPathDocument("c:\\test\\songs.xml");
>
> B  B  B  B  B  B XPathNavigator xnav = xdoc.CreateNavigator();
>
> B  B  B  B  B  B XPathExpression songsExpr =
> xnav.Compile("/music_songs/song[category='Rock']");
> B  B  B  B  B  B XPathExpression countSongsExpr =
> xnav.Compile("count(./preceding-sibling::song)");
>
> B  B  B  B  B  B XPathNodeIterator iterator =
> (XPathNodeIterator)xnav.Evaluate(songsExpr);
>
> B  B  B  B  B  B while(iterator.MoveNext())
> B  B  B  B  B  B {
> B  B  B  B  B  B  B  B XPathNavigator songNav =
> (XPathNavigator)iterator.Current.Clone();
> B  B  B  B  B  B  B  B double songPosition =
> (double)songNav.Evaluate(countSongsExpr) + 1;
> B  B  B  B  B  B }
>
> The above XPath 1.0 sample works, but hopefully this also shows how
> much simpler (and more readable) things would be with XPath 2.0
>
> Regards
> Phil Fearon
> http://qutoric.com/
>
> On Sun, Jun 13, 2010 at 8:43 PM, Alice Wei <elite.english@xxxxxxxxx> wrote:
>> Hi,
>>
>> I have an XML snippet as in the following:
>>
>> <music_songs>
>> B <song>
>> B  B <title>(I Just) Died In Your Arms</title>
>> B  B <category>Rock</category>
>> B  B <album>80 Popular Hits</album>
>> B  B <artist>Cutting Crew</artist>
>> B  B <date added="03-24-2009"/>
>> B </song>
>> B </music_songs>
>>
>> This is one of the songs out of categories I have in my xml file, and
>> currently I use XPath expression as in the following:
>> /music_songs/song[category='Rock' as an example to find all the songs
>> in the Rock category.
>>
>> I need to also be able to pull the position index of the song elements
>> that I pull from the above expression, and use that in VB.NET for
>> process. I tried using count(), position(), but they seem to be able
>> to detect, but they cannot give me a list like
>>
>> 1
>> 2
>> 3
>>
>> for the index id of the search list. Is there a particular expression
>> I need to use here?
>>
>> Thanks for your help.

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.