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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как выбрать элементы по атрибуту из xml, Выбор элементом по атрибуту 
:(
    Опции темы
vinograd2008
Дата 30.1.2012, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Есть xml документ следующего вида:

Код

<?xml version='1.0' encoding='utf-8'?>
<?xml-stylesheet type='text/xsl' href='1.xsl'?>
<Ssil id="1">
<Ssilka>s1</Ssilka>
</Ssil>
<Ssil id="2">
<Ssilka>s1-1</Ssilka>
</Ssil>
<Ssil id="3">
<Ssilka>s1-1-1</Ssilka>
</Ssil>
<Ssil id="4">
<Ssilka>s1-1-2</Ssilka>
</Ssil>
<Ssil id="5">
<Ssilka>s1-1-3</Ssilka>
</Ssil>
<Ssil id="6">
<Ssilka>s1-1-4</Ssilka>
</Ssil>
<Ssil id="7">
<Ssilka>s1-1-5</Ssilka>
</Ssil>
<Ssil id="8">
<Ssilka>s1-1-6</Ssilka>
</Ssil>
<Ssil id="9">
<Ssilka>s1-1-7</Ssilka>
</Ssil>
<Ssil id="10">
<Ssilka>s1-1-7-1</Ssilka>
</Ssil>
<Ssil id="11">
<Ssilka>s1-1-7-2</Ssilka>
</Ssil>
<Ssil id="12">
<Ssilka>s1-1-7-3</Ssilka>
</Ssil>
<Ssil id="13">
<Ssilka>s1-1-7-4</Ssilka>
</Ssil>
<Ssil id="14">
<Ssilka>s1-1-7-5</Ssilka>
</Ssil>
<Ssil id="15">
<Ssilka>s1-1-7-6</Ssilka>
</Ssil>
<Ssil id="16">
<Ssilka>s1-1-7-7</Ssilka>
</Ssil>
<Ssil id="17">
<Ssilka>s1-1-7-8</Ssilka>
</Ssil>
<Ssil id="18">
<Ssilka>s1-1-7-9</Ssilka>
</Ssil>
<Ssil id="19">
<Ssilka>s1-1-7-10</Ssilka>
</Ssil>
<Ssil id="20">
<Ssilka>s1-1-7-11</Ssilka>
</Ssil>
<Ssil id="21">
<Ssilka>s1-1-7-12</Ssilka>
</Ssil>
<Ssil id="22">
<Ssilka>s1-1-7-13</Ssilka>
</Ssil>
<Ssil id="23">
<Ssilka>s1-1-7-14</Ssilka>
</Ssil>
<Ssil id="24">
<Ssilka>s1-1-7-15</Ssilka>
</Ssil>
<Ssil id="25">
<Ssilka>s1-1-7-16</Ssilka>
</Ssil>
<Ssil id="26">
<Ssilka>s1-1-7-17</Ssilka>
</Ssil>
<Ssil id="27">
<Ssilka>s1-1-7-18</Ssilka>
</Ssil>
<Ssil id="28">
<Ssilka>s1-1-7-19</Ssilka>
</Ssil>
<Ssil id="29">
<Ssilka>s1-1-7-20</Ssilka>
</Ssil>
<Ssil id="30">
<Ssilka>s1-1-7-21</Ssilka>
</Ssil>
<Ssil id="31">
<Ssilka>s1-1-7-22</Ssilka>
</Ssil>
<Ssil id="32">
<Ssilka>s1-1-7-23</Ssilka>
</Ssil>
<Ssil id="33">
<Ssilka>s1-1-8</Ssilka>
</Ssil>
<Ssil id="34">
<Ssilka>s1-1-9</Ssilka>
</Ssil>
<Ssil id="35">
<Ssilka>s1-1-10</Ssilka>
</Ssil>
<Ssil id="36">
<Ssilka>s1-1-11</Ssilka>
</Ssil>
<Ssil id="37">
<Ssilka>s1-1-12</Ssilka>
</Ssil>
<Ssil id="38">
<Ssilka>s1-2</Ssilka>
</Ssil>
</Root>



Как выбрать из него элементы с атрибутом id с 3 по 9 и с 33 до 37?

Пробовал так но не работает как должно выводит один элемент только 9.

Код


<?xml version='1.0' encoding='utf-8'?>
<xsl:stylesheet version="1.0"
 xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
 <xsl:output method="html"/>
 <xsl:strip-space elements="*"/>
 
 <xsl:template match="/*/*">
 
  <xsl:variable name="p">
    <xsl:value-of select="document('1.xml')//Ssil[@id &gt; 8 
    and @id &lt; 11]/Ssilka" /> 
 </xsl:variable>
 
<xsl:value-of select="$p"/>
 
 </xsl:template>
 
 </xsl:stylesheet>



Это сообщение отредактировал(а) vinograd2008 - 30.1.2012, 21:29
PM MAIL   Вверх
diadiavova
Дата 30.1.2012, 23:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Значение атрибута имеет строковый тип, его надо в число преобразовать с помощью функции number


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vinograd2008
Дата 31.1.2012, 14:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(diadiavova @ 30.1.2012,  23:32)
Значение атрибута имеет строковый тип, его надо в число преобразовать с помощью функции number

Как это можно сделать?

Попробовал сделать так 

Код


  <xsl:variable name="p">
                      <xsl:for-each select="document('dannie.xml')//Root/Ssil[@id &gt; 2 and @id &lt; 10]/Ssilka">
                        <xsl:value-of select="."/>
                        </xsl:for-each>
 </xsl:variable>



Элементы выбираются но они отбираются в кучу.

Мне надо чтоб каждый элемент шел с новой строки то есть.

Сейчас

s1-1-1s1-1-2s1-1-3s1-1-4s1-1-5s1-1-6s1-1-7

Надо чтоб было

s1-1-1
 
s1-1-2

s1-1-3

s1-1-4

s1-1-5

s1-1-6

s1-1-7

Как это можно сделать?
PM MAIL   Вверх
diadiavova
Дата 31.1.2012, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(vinograd2008 @  31.1.2012,  15:01 Найти цитируемый пост)
Как это можно сделать? 

Для этого надо вставлять элемент <br/> после каждого. В результате ведь хтмл все таки получается.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vinograd2008
Дата 31.1.2012, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(diadiavova @ 31.1.2012,  14:12)
Цитата(vinograd2008 @  31.1.2012,  15:01 Найти цитируемый пост)
Как это можно сделать? 

Для этого надо вставлять элемент <br/> после каждого. В результате ведь хтмл все таки получается.

Вставил <br/> все равно не выводится как надо.

Код


<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="/Root">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ru" lang="ru">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Раздел "<xsl:value-of select="Section" />"</title>
        <link rel="stylesheet" type="text/css" href="css/style3.css" />
</head>
<body bgcolor="#33CCFF">

<table width="100%" border="1"  bordercolor="#33CCFF" cellspacing="0" cellpadding="4" >
  <tr>
    <td colspan="2" align="center"><div align="center" class="section">Раздел</div></td>
  </tr>
  <tr>
    <td colspan="2" align="center"><div align="center" class="section">
      <p><xsl:value-of select="/Root/Section" /></p>
    </div></td>
  </tr>
  <tr>
    <td width="50%" height="43" valign="top"><ul type="disc">
          </ul>
    </td>
    <td width="50%" valign="top" > 
<ul type="disc">
      <li><b>ПОДРАЗДЕЛЫ</b></li>
      <ul type="circle">
      <xsl:for-each select="Subsections[Subsection]"> 
 
  <xsl:variable name="p">
                      <xsl:for-each select="document('dannie.xml')//Root/Ssil[@id &gt; 2 and @id &lt; 10]/Ssilka">
                        <xsl:value-of select="."/>
                        </xsl:for-each><br/>
 </xsl:variable>
 
     <li> 
        <xsl:value-of select="$p" /><br/>
       
       </li><br/>
         
    </xsl:for-each>
      </ul>
    </ul>
    </td>
  </tr>
 <tr>
    <td colspan="2" align="center"><div align="center">
    <a href="javascript: history.go(-1)">ВЕРНУТЬСЯ В РОДИТЕЛЬСКИЙ РАЗДЕЛ</a></div></td>
  </tr>
</table>
</body>
</html>
</xsl:template>

   <xsl:template name="for">
        <xsl:param name="i" select="position()"/>
        <xsl:param name="n" />
        <xsl:if test="$i &lt; $n">
           <xsl:call-template name="for">
                <xsl:with-param name="i" select="$i+1"/>
                <xsl:with-param name="n" select="$n"/>
           </xsl:call-template>
        </xsl:if>
    </xsl:template>

       <xsl:template name="fort">
        <xsl:param name="j" select="position()"/>
        <xsl:param name="n" />
        <xsl:if test="$j &lt; $n">
           <xsl:call-template name="fort">
                <xsl:with-param name="j" select="$j+1"/>
                <xsl:with-param name="n" select="$n"/>
           </xsl:call-template>
        </xsl:if>
    </xsl:template>
    
    
     <xsl:template match="Ssil">
        <div>
                <xsl:value-of select="Ssilka" />
        </div>
 </xsl:template>

</xsl:stylesheet>



Исходный XML файл в котором должен отображаться результат

Код


<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="1.xsl" ?>
<Root>

<Section>Страны</Section>

<Subsections>
<Subsection>Россия</Subsection>
</Subsections>

<Subsections>
<Subsection>Индия</Subsection>
</Subsections>

</Root>



То есть вместо Россия, Индия на выходе я получая сейчас s1-1-1s1-1-2s1-1-3s1-1-4s1-1-5s1-1-6s1-1-7

А надо чтобы вместо Россия на выходе выводилось s1-1-1 а вместо Индия s1-1-2

Это сообщение отредактировал(а) vinograd2008 - 31.1.2012, 14:37
PM MAIL   Вверх
diadiavova
Дата 31.1.2012, 15:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(vinograd2008 @  31.1.2012,  15:32 Найти цитируемый пост)
Вставил <br/> все равно не выводится как надо.

В списке это не нужно.

Код

<xsl:variable name="p">
                      <xsl:for-each select="document('dannie.xml')//Root/Ssil[@id &gt; 2 and @id &lt; 10]/Ssilka">
                        <xsl:value-of select="."/>
                        </xsl:for-each><br/>
 </xsl:variable>
 
     <li> 
        <xsl:value-of select="$p" /><br/>
       
       </li><br/>

Ну так, а чего ты хотел, если в переменную p ты передаешь весь список, а потом его размещаешь в элементе li?
Цитата(vinograd2008 @  31.1.2012,  15:32 Найти цитируемый пост)
А надо чтобы вместо Россия на выходе выводилось s1-1-1 а вместо Индия s1-1-2

А по какому принципу их надо отбирать именно так? Ты этого не описал. В общем, убери фор-ич из определения переменной p, ну и там в выражении надо точнее указать, как отбирается ссылка, соответствующая стране. Что-то типа
Код

<xsl:variable name="p" select="document('dannie.xml')//Root/Ssil[@id &gt; 2 and @id &lt; 10]/Ssilka[???]"/>

Там вместо вопросительных знаков должно быть выражение, отбирающее нужную ссылку


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
vinograd2008
Дата 31.1.2012, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата(diadiavova @ 31.1.2012,  15:49)
Цитата(vinograd2008 @  31.1.2012,  15:32 Найти цитируемый пост)
Вставил <br/> все равно не выводится как надо.

В списке это не нужно.

Код

<xsl:variable name="p">
                      <xsl:for-each select="document('dannie.xml')//Root/Ssil[@id &gt; 2 and @id &lt; 10]/Ssilka">
                        <xsl:value-of select="."/>
                        </xsl:for-each><br/>
 </xsl:variable>
 
     <li> 
        <xsl:value-of select="$p" /><br/>
       
       </li><br/>

Ну так, а чего ты хотел, если в переменную p ты передаешь весь список, а потом его размещаешь в элементе li?
Цитата(vinograd2008 @  31.1.2012,  15:32 Найти цитируемый пост)
А надо чтобы вместо Россия на выходе выводилось s1-1-1 а вместо Индия s1-1-2

А по какому принципу их надо отбирать именно так? Ты этого не описал. В общем, убери фор-ич из определения переменной p, ну и там в выражении надо точнее указать, как отбирается ссылка, соответствующая стране. Что-то типа
Код

<xsl:variable name="p" select="document('dannie.xml')//Root/Ssil[@id &gt; 2 and @id &lt; 10]/Ssilka[???]"/>

Там вместо вопросительных знаков должно быть выражение, отбирающее нужную ссылку

Отбираться они должны по такому принципу если в исходном документе есть ссылки s1-1 или s1-2 то нужно отбирать ссылки с 3 по 10.
PM MAIL   Вверх
diadiavova
Дата 31.1.2012, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

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



Цитата(vinograd2008 @  31.1.2012,  19:35 Найти цитируемый пост)
Отбираться они должны по такому принципу если в исходном документе есть ссылки s1-1 или s1-2 то нужно отбирать ссылки с 3 по 10. 

А как это соотносится с этим?
Цитата(vinograd2008 @  31.1.2012,  15:32 Найти цитируемый пост)

А надо чтобы вместо Россия на выходе выводилось s1-1-1 а вместо Индия s1-1-2

Вообще, покажи, что ты хочешь в результате получить.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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