Использование двух элементов для xsl: key key - PullRequest
3 голосов
/ 26 июля 2010

Я знаю, что если у меня есть XML-файл, подобный этому:

 <persons>
   <class name="English">
        <person name="Tarzan" id="050676"/>
        <person name="Donald" id="070754"/>
        <person name="Dolly" id="231256"/>
   </class>
   <class name="Math">
        <person name="Winston" id="050677"/>
        <person name="Donald"  id="070754"/>
        <person name="Fred"    id="231257"/>
   </class>
 </persons>

Я могу определить ключ в XSL-файле следующим образом:

 <xsl:key name="preg" match="person" use="@id"/> 

где я использую идентификатор в качестве ключа. Тем не менее, Дональд указан дважды, но только в одном месте в прег.

Предположим, я хочу, чтобы он дважды указывался в preg. То есть я хочу, чтобы имя класса было частью идентификатора. По сути, я хочу, чтобы у preg были ключи, эквивалентные упорядоченным парам: (class-name, id). Как мне это сделать (используя XSLT 1.0)?

1 Ответ

6 голосов
/ 26 июля 2010

Конкатенация ключей?Как насчет

use="concat(../@name, @id)"

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

use="concat(../@name, '|', @id)"

Это рекомендуемый подход в справочнике Майкла Кея по XSLT2.

...