开发者

preceding-sibling of current text node

I have this kind of XML :

<nav:objectList>
    <nav:item >
      <nav:attribute name="display">1</nav:attribute> 
      <nav:attribute name="className">document.Document</nav:attribute> 
      <nav:attribute name="title">item 1</nav:attribute> 
      <nav:attribute name="getFileExtension">pdf</nav:attribute> 
    </nav:item>
    <nav:item >
      <nav:attribute name="display">2</nav:attribute> 
      <nav:attribute name="className">video.Video</nav:attribute> 
      <nav:attribute name="title">item 2</nav:attribute> 
      <nav:attribute name="getFileExtension">mp4</nav:attribute> 
    </nav:item>
    <nav:item >
      <nav:attribute name="display">3</nav:attribute> 
      <nav:attribute name="className">document.Document</nav:attribute> 
      <nav:attribute name="title">item 3</nav:attribute> 
      <nav:attribute name="getFileExtension">pdf</nav:attribute> 
    </nav:item>
    <nav:item >
      <nav:attribute name="display">4</nav:attribute> 
      <nav:attribute name="className">video.Video</nav:attribute> 
      <nav:attribute name="title">item 4</nav:attribute> 
      <nav:attribute name="getFileExtension">mp4</nav:attribute> 
    </nav:item>
    <nav:item >
      <nav:attribute name="display">5</nav:attribute> 
      <nav:attribute name="className">document.Document</nav:attribute> 
      <nav:attribute name="title">item 5</nav:attribute> 
      <nav:attribute name="getFileExtension">pdf</nav:attribute> 
    </nav:item>
</nav:objectList>

I want to count all document.Document prece开发者_Go百科ding the current document.Document. (I don't want to count the video.Video) For example, if i am on the 5, I want to return 2 and not 4.

It looks like the post : XSLT - Comparing preceding-sibling's elements with current's node element

I was actually trying (many things) like :

count(preceding-sibling::nav:attribute[@name='type.className']='com.arsdigita.cms.document.Document'

Thank's

Romain


Change preceding-sibling to preceding, because the attributes you're trying to count are not siblings of the node you're trying to count from (they have different parents). Also you need to make a complete clause out of the = 'document.Document' part:

count(preceding::nav:attribute[@name='type.className'
                               and . = 'document.Document'])

(or maybe you want the full 'com.arsdigita.cms.document.Document' in there?)


I'm not familiar with xslt, but I use xpath plenty. This yields a sequence of nav:item elements with the document.Document descendents:

//nav:item[nav:attribute[@name="className" and text()="document.Document"]]

And this run from one of those nav:item elements, will tell you how many similar elements precede it:

count(preceding-sibling::nav:item[nav:attribute[@name="className" and text()="document.Document"]])
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜