2014-10-22 11 views
0

Я пытаюсь изменить существующий тест, если узел содержит определенную строку. На данный момент она работает против одной строки, и это выглядит следующим образом:XSL содержит несколько строк

<xsl:key name="TEST" match="Parrent[contains(./Name,'Aurora') and contains(./Status,'Ongoing')]" use="Final"/> 

И это позже используется для преобразования конечного значения в узле, где Name = Aurora и Status = Текущая. Теперь им интересно делать то же самое, но для нескольких значений, которые я получаю от другого файла .xml в 15 строк, выглядит следующим образом:

Status 
Ongoing 
Stoped 
Started 
Ready 
NotReady 
. 
. 
. 

Поэтому в основном я хотел бы сделать то же самое, как и прежде только для нескольких типов состояния чем Продолжается. Какой был бы лучший способ реализовать такое преобразование? Заранее спасибо.

+0

** 1. ** Пожалуйста, укажите XSLT 1.0 или 2.0. - ** 2. ** Точный формат списка множественных значений и метод, по которому вы его получите, не ясны. –

+0

Извините, я должен был упомянуть, что это должно работать в xslT 1.0 – user2842773

+0

Хорошо. Теперь, когда вы готовы ответить на второй вопрос ... –

ответ

0

Ну что ж, вам действительно нужна проверка contains или вы можете сравнить ее за равенство? В последнем случае вы можете использовать оператор = с наборами узлов или последовательностями узлов или значений, например. с XSLT 2.0

Status = ('Ongoing', 'Stopped', 'Started', 'Ready', 'NotReady') 

соответственно, если у вас есть значения в другом документе со структурой, например.

<status-list> 
    <status>Ongoing</status> 
    <status>Stopped</status> 
    <status>Started</status> 
    ... 
</status-list> 

, то вы можете сравнить

Status = document('status-list-data.xml')/status-list/status 
0

Вы не можете использовать переменную в атрибуте спички в <key>, но вы можете фильтр Результаты этого ключа по предиката. Например, следующее выражение:

key('keyname', something)[Status=exsl:node-set($status-list)/status] 

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

<xsl:variable name="status-list"> 
    <status>Ongoing</status> 
    <status>Stopped</status> 
    <status>Started</status> 
    <status>Ready</status> 
    <status>NotReady</status> 
</xsl:variable> 

Обратите внимание, что вам нужно, чтобы объявить пространство имен, связанного с префикс exsl - см .: http://www.exslt.org/exsl/index.html

Смежные вопросы