Использование ключа (для группировки) в переменной, содержащей набор узлов - PullRequest
0 голосов
/ 19 августа 2011

это урезанный пример моего xml

<Albums>
    <Album id="1">
        <info>sdkjsdaln</info>
    </Album>
    <Album id="2">
        <info>asdlnasd</info>
    </Album>
    <Album id="3">
        <info>sadsasd</info>
    </Album>
</Albums>

Я использую функцию расширения, чтобы получить больше данных

<xsl:template match="Album">
     <xsl:variable name="Album" select="mfeg:GetAlbumMetadata(@id)"/>
</xsl:template>

Затем у меня есть переменная $ Album, на которую я ссылаюсь, чтобы получить все дополнительные данные, как показано ниже

<Album>
    <Tracks>
        <Track>
        <Contributors>
            <Contributor>Tim</Contributor>
            <Contributor>Alfie</Contributor>
        </Contributors>
        </Track>
        <Track>
        <Contributors>
            <Contributor>Tim</Contributor>
            <Contributor>Alfie</Contributor>
        </Contributors>
        </Track>
        <Track>
        <Contributors>
            <Contributor>Kevin</Contributor>
            <Contributor>Sam</Contributor>
        </Contributors>
        </Track>
    </Tracks>
</Album>

Я пытаюсь получить уникальных участников, я не знаю, как / если возможно использовать ключ в моей переменной $ Album для получения необходимых мне данных. Я попробовал xpath ниже, но он не работает.

$Album/Tracks/Track/Contributors/Contributor[not(.=preceding-sibling::Name)]

Любая помощь будет оценена!

1 Ответ

0 голосов
/ 19 августа 2011

Хорошо, чтобы определить ключ, который вы просто используете, например,

<xsl:key name="k1" match="Track/Contributors/Contributor" use="."/>

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

<xsl:apply-templates select="$Album/Tracks/Track/Contributors/Contributor[generate-id() = generate-id(key('k1', .)[1])]"/>

, а затем вы можете написать шаблон дляУчастник элементы.Обратите внимание, что вам может потребоваться адаптировать путь, например, к $Album/Album/Tracks/Track/Contributors/Contributor[generate-id() = generate-id(key('k1', .)[1])], в зависимости от того, какой тип узла (элемента или узла документа) возвращает ваша функция расширения.

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