2011-05-03 56 views
1

我在处理正确的语句以返回唯一的值列表时遇到了一些问题。以下路径仅仅是一个例子,与我的困境类似。XSLT 1祖先的不同选择

/Root/Books/Book/Writers/Writer/Fullname 

什么将返回“fullnames”的唯一列表,记住,这里的假设是有多个作者的每本书,他们可能参与了多本书籍。

感谢您的帮助

这里是XML文档

<Root> 
    <Books> 
     <Book> 
      <Title>Book A</Title> 
      <Writers> 
       <Writer>Jon Smith</Writer> 
       <Writer>Peter Smith</Writer> 
      </Writers> 
     </Book> 
     <Book> 
      <Title>Book B</Title> 
      <Writers> 
       <Writer>Jon Smith</Writer> 
       <Writer>Peter Smith</Writer> 
       <Writer>James Bloggs</Writer> 
      </Writers> 
     </Book> 
     <Book> 
      <Title>Book C</Title> 
      <Writers> 
       <Writer>Bob Peterson</Writer> 
       <Writer>Peter Smith</Writer> 
       <Writer>James Bloggs</Writer> 
      </Writers> 
     </Book> 
    </Books> 
</Root> 

我想退是不同的作家名单的一个例子。

Jon Smith Peter Smith James Bloggs Bob Peterson。

这是棘手的,因为有多个作家多本书。

+0

很辛苦,没有看到输入XML说。 – 2011-05-03 07:32:16

+1

[使用Muenchian方法分组](http://www.jenitennison.com/xslt/grouping/muenchian.html) – 2011-05-03 09:49:21

+0

我一直在玩“前面的”语句,但仍似乎无法得到它。下面是一个XML文档示例: – Jon 2011-05-03 23:54:22

回答

0

按照罗伯特的link,只是做分组配方的第一步:

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> 

<xsl:template match="/"> 
    <xsl:copy-of select='Root/Books/Book/Writers/Writer[not(preceding::Writer = .)]'/> 
</xsl:template> 

</xsl:stylesheet> 
+0

真棒,感谢您的帮助,我只是刚刚关闭。我有一种感觉,那就是只会返回独特的作家PER书目列表,而不是一堆书。谢谢,通过XSLT了解了一些新内容。 – Jon 2011-05-04 12:05:53

+0

要获得每本书的相同内容,请将'preceding'替换为'prior-sibling'。 – 2011-05-04 12:14:25