У мене була ця проблема strage при створенні XSL сьогодні. Подивився відповіді всій мережі, але не міг знайти .... Насправді я думаю! Я знаю, що вм'ятина моя проблема була, так що мені шукати?
У всякому разі! Тільки у випадку, якщо у вас є ця ж проблема і якось занадто силою змусити вас вдалося посадити на цій сторінці ... Ви мене дякувати тонн ... І якщо ви випадково приземлився на цій сторінці, з незрозумілої доля і ви будете Розробник XSL, DO Запишіть це зараз, НА МАЙБУТНЄ причина, якщо в один прекрасний день, ви стикаєтеся з цією проблемою, то сила не може бути з вами.
Постановка завдання:
У мене є XML, де є два вузли з декількома елементами в ньому і елементи між цими двома вузлами мають взаємно однозначна відповідність. У наведеному нижче прикладі, кожен елемент у вузлі <array name="PLAYURL" /> відноситься (відповідне положення) елемент у вузлі <array name="SITENAME" />
<?xml version="1.0" encoding="utf-8"?>
<myplaylists>
<playlist>
<title>Best of Rest </title>
<array name="SITENAME">
<str>www.musicindiaonline.com</str>
<str>www.dhingana.com</str>
<str>www.raaga.com</str>
<str>www.smashits.com</str>
<str>www.desimusic.com</str>
<str>www.musicplug.in</str>
</array>
<array name="PLAYURL">
<str>http://www.musicindiaonline.com/123/</str>
<str>http://www.dhingana.com/play/123</str>
<str>http://www.raaga.com/123</str>
<str>http://ww.smashits.com/123</str>
<str>http://www.desimusic.com/123</str>
<str>http://www.musicplug.in/123</str>
</array>
</playlist>
</myplaylists>
Тепер у мене є цикл, де я циклі <array name="SITENAME">, і я хочу, щоб отримати відповідний пункт (на відповідну позицію) в <array name="PLAYURL">,
Що б ви normaly спробувати зробити, це ...
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
play from : <a href="{../../array[@name='PLAY']/str[position()]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
Вибачте! Це не підходить ... Ах! Surpised ...
Тепер ви, мабуть, хочете спробувати, щось на зразок цього ...
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos"> <xsl:value-of select="position()"/></xsl:variable>
play from : <a href="{../../array[@name='PLAY']/str[$pos]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
І знову це не буде працювати ... Тепер вас чесати потилицю, намагаючись зв'язатися з кожного, хто ви думаєте, знає кілька XSL і може бути будь-якої допомоги ... Ви намагаєтеся будь-який інший варіант ... і все ж це не буде працювати ... Ну! Ось що трапилося зі мною, принаймні ...
DONT зневіряйтеся! Спробуйте це
<xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ <xsl:for-each select="myplaylists/playlist/array[@name='SITENAME']/str">
<xsl:variable name="pos-int" select="position()" />
play from : <a href="{../../array[@name='PLAY']/str[$ pos-int ]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
]}"/> <xsl:value-of select="." /></a>
</xsl:for-each>
Не питайте мене, чому це ПРАЦЮЄ. Тому що я не маю права причина ... якщо ви робите! Будь ласка видалити коментар. Це може бути дуже корисним. Крім того! якщо у вас є кращу назву для цієї посади, зробити напишіть мені 