2010-10-14 5 views
1

Мы имеем на входе XML-как следующее:XSLT: выберите узел, который начинается с заранее определенным списком элементов

<R> 
    <MT N="folder" V="Folder1\Subfolder1" /> 
    <MT N="folder" V="Folder2xx\Subfolder1" /> 
    <MT N="folder" V="Folder3yyyy\Subfolder1" /> 
    <MT N="folder" V="Folder4zzzz\Subfolder1" /> 
</R> 

В нашей XSLT, который выполняет отображение, запись:

<xsl:value-of select="MT[@N='folder']/@V"/> 

отображает:

Folder1\Subfolder1 Folder2xx\Subfolder1 Folder3yyyy\Subfolder1 Folder4zzzz\Subfolder1 

Нам нужно достичь уникальной записи, которая начинается с предопределенного настраиваемого списка str например, если наш предопределенный список

Folder2xx, Folder18ppp, Folder212aaa 

Я хотел бы показать, как выход только

Folder2xx\Subfolder1 

Оптимальная вещь была бы даже:

Folder2xx\Subfolder1 (linked 3 times) 

, но я был бы очень признателен помощь по выбор уникального элемента. Это, к сожалению, слишком сложно для моих знаний о XSLT, может кто-то помочь? Наша система поддерживает XSLT 2.0 и XPATH 2.0

спасибо большое!

Марио

+0

Хороший вопрос, +1. См. Мой ответ для краткого 1-линейного решения XPath 2.0. :) –

+0

Какова логика '(связанная 3 раза)'? – 2010-10-14 18:34:53

+0

@Alejandro: на самом деле список элементов «папки» - это список реальных местоположений и ссылок на них, поэтому (связанный 3 раза) - это количество элементов, которые соответствуют шаблонам реальных местоположений. Извините, что было неясно, но это было слишком мне очень сложно, я не ожидал такого ясного (и быстрого!) Решения ... – Mario

ответ

0

Использование:

MT[@N='folder'] 
    /@V[substring-before(.,'\') 
     = 
     ('Folder2xx', 'Folder18ppp', 'Folder212aaa') 
     ] 
+0

@Dimitre: +1 Быстрый ответ. Я этого не видел. Удаление шахты. – 2010-10-14 18:26:48

+0

@Alejandro: Восстановить его. Неизвестно, кто был быстрее :) –

+0

@Alejandro: Было бы несправедливо, что у меня появился верхний и у вас нет. –

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