Subject: Re: [xsl] Find the Position Index of Elements From: Alice Wei <elite.english@xxxxxxxxx> Date: Sun, 13 Jun 2010 18:26:08 -0400 |
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 |
---|
|
<- Previous | Index | Next -> |
---|---|---|
Re: [xsl] Find the Position Index o, Philip Fearon | Thread | Re: [xsl] Find the Position Index o, Michael Kay |
Re: [xsl] Find the Position Index o, Philip Fearon | Date | Re: [xsl] distinguish whether varia, Michael Kay |
Month |