Модераторы: diadiavova
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML+XSL->HTML, проблемы с циклом 
:(
    Опции темы
O_Irina
Дата 12.12.2006, 14:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Часть исходного xml-документа, который нужно преобразовать в html с помощью xsl:

Код

<DOCUMENT>
<TITLE>Главная страница</TITLE>
<CONTENT/> 
<SET name="T_REALM" cols="9" rows="25">
<ROW num="1" pk="12">
<COL name="realm">12</COL> 
<COL name="uri"><![CDATA[/about]]></COL>
<COL name="name"><![CDATA[О нас]]></COL>
<COL name="parent">0</COL>
<COL name="module"><![CDATA[content.eng.php]]></COL>
<COL name="xsl">12</COL>
<COL name="category">1</COL> 
<COL name="pos">3</COL> 
</ROW>
<ROW num="2" pk="22">
<COL name="realm">22</COL> 
<COL name="uri"><![CDATA[/proposal/merchandise]]></COL>
<COL name="name"><![CDATA[ Мерчендайзинг]]></COL>
<COL name="parent">20</COL>
<COL name="module"><![CDATA[content.eng.php]]></COL>
<COL name="xsl">12</COL> 
<COL name="category">1</COL> 
<COL name="pos">2</COL> 
</ROW>
...
</SET>
</DOCUMENT>


Нужно сделать <xsl:value-of select="//COL"/>  если COL name="name"
то есть в html-документе должно быть так:

О нас...
Мерчендайзинг

Пытаюсь делать цикл по всем COL

Код

<xsl:for-each select="DOCUMENT/SET/ROW">   
   <xsl:for-each select="COL">   
       <xsl:variable name="pos"><xsl:value-of select="@name"/></xsl:variable>
       <xsl:if test="$pos='name'">
          <xsl:value-of select="//COL"/>
          <br/>
       </xsl:if> 
   </xsl:for-each>  
</xsl:for-each>  


результат:
12
12

Как исправить ошибку?

PM MAIL   Вверх
achepkunov
Дата 13.12.2006, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 45
Регистрация: 13.12.2006

Репутация: нет
Всего: 1



Код

<xsl:value-of select="//COL"/>


здесь ты в цикле выбираешь все содержимое?

Код

<xsl:template match="/DOCUMENT/SET/ROW">

   <xsl:for-each select="COL">    
       <xsl:variable name="pos"><xsl:value-of select="@name"/></xsl:variable>    
       <xsl:if test="$pos='name'">    
          <xsl:value-of select="."/>    
          <br/>    
       </xsl:if>    
   </xsl:for-each>    

</xsl:template>



Так работает, хотя точно можно проще, только я не помню как, а книжка далеко, да и позно уже smile

Это сообщение отредактировал(а) achepkunov - 13.12.2006, 00:43
PM MAIL   Вверх
maxim1000
Дата 13.12.2006, 02:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник
Сообщений: 3334
Регистрация: 11.1.2003
Где: Киев

Репутация: 7
Всего: 110



вот попроще smile :
Код

<xsl:for-each select="//COL[@name='name']">
  <xsl:apply-templates/>
  <br/>
</xsl:for-each>



--------------------
qqq
PM WWW   Вверх
O_Irina
Дата 13.12.2006, 06:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Большое спасибо откликнувшимся, все получилось  smile 
воспользовалась советом maxim1000
PM MAIL   Вверх
O_Irina
Дата 13.12.2006, 09:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



Немножко переписала и делаю так:

Код

<xsl:for-each select="DOCUMENT/SET/ROW"> 
   
<xsl:variable name="row_n"><xsl:value-of select="@num"/></xsl:variable>    
   
    <xsl:for-each select="COL">
       <xsl:variable name="name_"><xsl:value-of select="@name"/></xsl:variable>    
       <xsl:if test="$name_='name'"> 
          <xsl:if test="$row_n=1">   
          <a href="/about"><xsl:value-of select="."/></a>
          <br/> 
          </xsl:if> 
          <xsl:if test="$row_n=2">   
          <a href="/proposal/merchandise" style="padding-left: 30px;"><xsl:value-of select="."/></a>
          <br/> 
          </xsl:if>  
        </xsl:if>    
    </xsl:for-each>    

</xsl:for-each>


Результат - 
О нас
Мерчендайзинг

А требуется наоборот
Как можно сделать сортировку по возрастанию pos?
В исходном xml так:

Код

<DOCUMENT>
<TITLE>Главная страница</TITLE>
<CONTENT/> 
<SET name="T_REALM" cols="9" rows="25">
<ROW num="1" pk="12">
...
<COL name="pos">3</COL> 
</ROW>
<ROW num="2" pk="22">
...
<COL name="pos">2</COL> 
</ROW>
...
</SET>
</DOCUMENT>


Это сообщение отредактировал(а) O_Irina - 13.12.2006, 10:21
PM MAIL   Вверх
O_Irina
Дата 13.12.2006, 11:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 15.11.2006

Репутация: нет
Всего: нет



вопрос больше не актуален, разобралась сама:

написала 
Код

<xsl:sort select="COL[@name='pos']" data-type="number" order="ascending" />

после 
Код

<xsl:for-each select="DOCUMENT/SET/ROW"> 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

Также рекомендуем Вам зайти в раздел FAQ ,раздел дополняется и, возможно, там вы увидите готовое решение.

Для ответов на часто задаваемые вопросы существует FAQ раздела. Новости можно публиковать в разделе новостей. Для статей так же есть специальный раздел

Желаем удачи в Вашем деле!


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, diadiavova.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | XML, XSL | Следующая тема »


 




[ Время генерации скрипта: 0.0435 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.