xsl-list
[Top] [All Lists]

Re: [xsl] XPath 1.0 Question: Can two sibling nodes each select their parent node to yield two nodes?

2010-09-22 16:45:27
On 22 September 2010 22:08, Costello, Roger L. <costello(_at_)mitre(_dot_)org> 
wrote:
Hi Folks,

This is an XPath 1.0 question.

Consider this document:

<?xml version="1.0" encoding="UTF-8"?>
<books>
   <category>
       <genre>Autobiography</genre>
       <book>
           <name>My Life and Times</name>
           <author>Paul McCartney</author>
       </book>
       <book>
           <name>The Beatles</name>
           <author>Paul McCartney</author>
       </book>
   </category>
   <category>
       <genre>Music</genre>
       <book>
           <name>Eight Days a Week</name>
           <author>Paul McCartney</author>
       </book>
   </category>
</books>

I would like to select the value of <genre> of each <book> with <author> 
equal to 'Paul McCartney'. Thus, I want the XPath to yield:

   Autobiography
   Autobiography
   Music

I thought that either of these XPath expressions would do the job:

   //book[author='Paul McCartney']/../genre

   //book[author='Paul McCartney']/preceding-sibling::genre

However, both result in this:

   Autobiography
   Music

What XPath 1.0 expression will produce the desired result?

I don't think you can do it in XPath 1.0, you either need XPath 2.0 or
XSLT to iterate or avoid the de-duplication.


-- 
Andrew Welch
http://andrewjwelch.com

--~------------------------------------------------------------------
XSL-List info and archive:  http://www.mulberrytech.com/xsl/xsl-list
To unsubscribe, go to: http://lists.mulberrytech.com/xsl-list/
or e-mail: <mailto:xsl-list-unsubscribe(_at_)lists(_dot_)mulberrytech(_dot_)com>
--~--