Subject: Re: [xsl] Find the Position Index of Elements From: Alice Wei <elite.english@xxxxxxxxx> Date: Sun, 13 Jun 2010 19:15:06 -0400 |
Hi, Mike: 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? 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, Michael Kay | Thread | Re: [xsl] Find the Position Index o, Dimitre Novatchev |
Re: [xsl] Find the Position Index o, Michael Kay | Date | Re: [xsl] Find the Position Index o, Dimitre Novatchev |
Month |