XSLT 1 Отличительный отбор по предкам - PullRequest
1 голос
/ 03 мая 2011

У меня возникли некоторые проблемы при разработке правильного оператора для возврата уникального списка значений. Следующий путь - только пример, который похож на мою дилемму.

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

Что бы вернуть уникальный список "полных имен", учитывая, что здесь предполагается, что для каждой книги существует несколько авторов, и они могут быть вовлечены в несколько книг.

Спасибо за вашу помощь

Вот пример 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>

Что я хотел бы вернуть, так это список разных авторов.

Джон Смит Питер Смит Джеймс Блогс Боб Петерсон.

Это сложнее, потому что есть несколько книг с несколькими авторами.

1 Ответ

0 голосов
/ 04 мая 2011

Перейдите по ссылке Роберта и просто выполните первый шаг рецепта группировки:

<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>
...