[XSL-LIST Mailing List Archive Home]
[By Thread]
[By Date]
=?UTF-8?B?UmU6IFt4c2xdIEZpbmQgdGhlIFBvc2l0aW9uIEluZGV4IG9mIEVsZW1lbnRz4oCP4oCP?=
Subject: Re: [xsl] Find the Position Index of Elements From: Dimitre Novatchev <dnovatchev@xxxxxxxxx> Date: Sun, 13 Jun 2010 16:50:03 -0700 |
On Sun, Jun 13, 2010 at 4:15 PM, Alice Wei <elite.english@xxxxxxxxx> wrote: > Hi, Mike: > > B I want the position of the position of the searched result. For > example, when I did /music_songs/song[category='Rock'][position()<11], > I get the first 10 songs in the searched list, and I am wondering if > it is possible that I could just find out the position of the > individual xml nodes that get pulled from the search. I would like to > use that number and set it dynamically to set the pagination of > results. > > Is this possible? You still haven't defined what you understand by "position" -- relative to what and in what node list? Providing a very specific example is really needed. -- Cheers, Dimitre Novatchev --------------------------------------- Truly great madness cannot be achieved without significant intelligence. --------------------------------------- To invent, you need a good imagination and a pile of junk ------------------------------------- Never fight an inanimate object ------------------------------------- You've achieved success in your field when you don't know whether what you're doing is work or play > > Alice > > Does this make sense? > > On Sun, Jun 13, 2010 at 6:58 PM, Michael Kay <mike@xxxxxxxxxxxx> wrote: >> On 13/06/2010 23:26, Alice Wei wrote: >>> >>> 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. >>> >> >> It seems you want an XPath 1.0 solution and David gave you an XPath 2.0 >> solution. >> >> As for me, I don't think you've explained your requirement. You talk about >> wanting the "position index" or the "index id" of the elements you retrieve, >> but I don't know what these terms mean. Do you want their position in the >> source tree, or their position in the list of retrieved elements? >> >> Michael Kay >> Saxonica >>> >>> Alice >>> >>> On Sun, Jun 13, 2010 at 6:14 PM, Philip Fearon<pgfearo@xxxxxxxxxxxxxx> >>> B 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> >>>> B 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. >> >> > > > > -- > Alice Wei, MIS > > Master of Information Science > Indiana University Bloomington
Current Thread |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Find the Position Index o, Alice Wei | Thread | Re: [xsl] Find the Position Index o, Alice Wei |
Re: [xsl] Find the Position Index o, Alice Wei | Date | Re: [xsl] Find the Position Index o, Alice Wei |
Month |