XPath: Соответствует одному из нескольких дочерних элементов

У меня есть небольшое приложение, которое ищет ссылки на публикации. Цитаты приведены в XML, и я передаю параметры в XSLT через PHP для поиска по таким полям, как инструмент или автор. Структура выглядит так:

<publications>
    <paper>
        <authors>
            <author>James Smith</author>
            <author>Jane Doe</author>
        </authors>
        <year>2010</year>
        <title>Paper 1</title>
        (more children)
    </paper>
    (more papers)
</publications>

Когда я вызываю свой шаблон в XSLT, я использую предикат, чтобы сократить количество отображаемых документов на основе критериев поиска. Итак, если установлен параметр $ author, например, я делаю:

<xsl:apply-templates select="paper[contains(authors/author, $author)]" />

Проблема: это работает для первого автора в «авторах», но игнорирует тех, которые находятся после этого. Таким образом, в приведенном выше примере поиск «Smith» вернет эту статью, но «Doe» ничего не вернет.

Как мне отформатировать свое выражение, чтобы учесть все элементы «author»?

5
задан BoltClock 6 July 2011 в 19:18
поделиться