Гость
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Split и сортировка средствами xsl 1.0 c привязкой к другому элементу. / 14 сообщений из 14, страница 1 из 1
10.05.2012, 15:16
    #37787972
McLighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
У меня есть такой xml

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
<results>
<result>
<versions>001 002 007</versions>
<url>http://link1.txt</url>
</result>

<result>
<versions>008 006 005</versions>
<url>http://link2.txt</url>
</result>
</results>



вопрос, смогу я получить такой вид используя xsl 1.0? :

Код: html
1.
2.
<a href="http://link1.txt">001</a><a href="http://link1.txt">002</a><a href="http://link2.txt">005</a>
<a href="http://link2.txt">006</a><a href="http://link1.txt">007</a><a href="http://link2.txt">008</a>




(Как разбить и отсортировать примерно знаю как сделать, но не могу версии связать с URL.)
...
Рейтинг: 0 / 0
10.05.2012, 16:18
    #37788105
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
Покажите свою сортировку и скажите какой XSLT процессор используется.

P.S. Без сортировки код будет в разы проще
...
Рейтинг: 0 / 0
10.05.2012, 16:59
    #37788194
McLighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
XSLT - version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform"
вторая версия не подойдет. EXSLT тоже не подходит.

Отсортировать у меня не получилось, смог только разбить на строки, вот мой код:
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:output method="xml" indent="yes"/>
  
<xsl:template name="token">
 <xsl:param name="token"/>
 <li>
  <xsl:value-of select="$token"/>
 </li>
</xsl:template>
  
<xsl:template name="split" match="text()" mode="split">
<xsl:param name="str" select="."/>
<xsl:param name="worddiv" select="','"/>

<xsl:choose>
 
 <xsl:when test="contains($str,$worddiv)">
  <xsl:call-template name="token">
   <xsl:with-param name="token" select="substring-before($str, $worddiv)"/>
  </xsl:call-template>
  <xsl:call-template name="split"> 
   <xsl:with-param name="str" select="substring-after($str, $worddiv)"/>
   <xsl:with-param name="worddiv" select="$worddiv"/>
  </xsl:call-template>
 </xsl:when>
 <xsl:otherwise>
  <xsl:call-template name="token">
   <xsl:with-param name="token" select="$str"/>
  </xsl:call-template>
 </xsl:otherwise>
 
</xsl:choose>
</xsl:template>
    
  <xsl:template name="data">
        <ul>
          <xsl:apply-templates mode="split">
            <xsl:with-param name="worddiv" select="' '"/>
          </xsl:apply-templates>
        </ul>
  </xsl:template>
  
  <xsl:template match="results">
    <xsl:for-each select="result">
       
       <xsl:for-each select="versions">         
              <xsl:call-template name="data"/> 
      </xsl:for-each>    
      
    </xsl:for-each>  
  </xsl:template>
  
  
</xsl:stylesheet>
        
...
Рейтинг: 0 / 0
11.05.2012, 00:49
    #37788637
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
McLighterXSLT - version="1.0" xmlns:xsl=" http://www.w3.org/1999/XSL/Transform"
вторая версия не подойдет. EXSLT тоже не подходит.Я не спрашиваю чем Вы не пользуетесь. Я спрашиваю, что Вы используете? Какой процессор Вы используете?
...
Рейтинг: 0 / 0
11.05.2012, 10:03
    #37788846
McLighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
Я пользуюсь вот этим: http://www.xmlper.com/
...
Рейтинг: 0 / 0
11.05.2012, 11:38
    #37789021
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
McLighterЯ пользуюсь вот этим: http://www.xmlper.com/ Тогда почему
McLighterEXSLT тоже не подходит.? Оно отлично поддерживается этим движком
...
Рейтинг: 0 / 0
11.05.2012, 16:46
    #37789747
McLighter
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
Мой Вопрос был не в том что чем поддерживается.
Я спросил можно ли используя xsl 1.0 реализовать split и сортировку полученных элементов.

Если нечего сказать, не надо уводить тему в сторону.
...
Рейтинг: 0 / 0
12.05.2012, 01:51
    #37790308
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
McLighterЯ спросил можно ли используя xsl 1.0 реализовать split и сортировку полученных элементов.Вы удивитесь, но EXSLT это расширение XSLT 1.0 . Так. что ответ - да, можно
...
Рейтинг: 0 / 0
14.05.2012, 17:25
    #37793608
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
особенность - используется библиотека msxml, у других тарнсформеров есть аналоги функции node-set
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:msxsl="urn:schemas-microsoft-com:xslt">

	<xsl:output method="xml" />
	<xsl:template match="/">
		<xsl:variable name="links">
			<xsl:for-each select="/results/result">
				<xsl:call-template name="create-links">
					<xsl:with-param name="str" select="versions/text()" />
					<xsl:with-param name="link" select="url/text()" />
				</xsl:call-template>
			</xsl:for-each>
		</xsl:variable>
		<xsl:for-each select="msxsl:node-set($links)/item">
			<xsl:sort select="@name" />
			<a href="{@link}">
				<xsl:value-of select="@name" />
			</a>
		</xsl:for-each>
	</xsl:template>
	<xsl:template name="create-links">
		<xsl:param name="str" />
		<xsl:param name="link" />
		
		<xsl:choose>
				<xsl:when test="contains( $str, ' ')">
					<item name="{substring-before( $str, ' ' )}" link="{$link}" />
					<xsl:call-template name="create-links">
						<xsl:with-param name="str" select="substring-after( $str, ' ' )" />
						<xsl:with-param name="link" select="$link" />
					</xsl:call-template>
				</xsl:when>
				<xsl:otherwise>
					<item name="{$str}" link="{$link}" />
				</xsl:otherwise>
		</xsl:choose>
	</xsl:template>
	<xsl:template match="ComparsionExpression">
		<xsl:copy-of select="." />
	</xsl:template>
</xsl:stylesheet>
...
Рейтинг: 0 / 0
14.05.2012, 22:40
    #37793975
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
mage.lanу других тарнсформеров есть аналоги функции node-setЕму же нужно
McLighterEXSLT тоже не подходит.
...
Рейтинг: 0 / 0
15.05.2012, 12:52
    #37794794
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
_Vasilisk_,

я как-то не уверен, что затыкание дыры стандарта по превращению переменной в фрагмент дерева - относится к расширению.

ну если так, то и на совсем голом xsl написать можно, но только за деньги.

по чесночку, эта проблема решается следующими способами:
- приведение xml к нормальному, т.к. разбирать строки это не задача xsl,
- двойная трансформация
...
Рейтинг: 0 / 0
15.05.2012, 14:04
    #37795051
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
mage.lanна совсем голом xsl написать можноДвойной трансформацией?
mage.lanразбирать строки это не задача xsl,Помнится как я извращался для того, чтобы XSL часть данных тянула из БД...
...
Рейтинг: 0 / 0
16.05.2012, 12:09
    #37796761
mage.lan
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
_Vasilisk_mage.lanна совсем голом xsl написать можноДвойной трансформацией?
нет. строится переменная ключей сортировки, сортируется, потом делаем кучу рекурсий по хмл, пока не выберем все ключи.

безумная, бесполезная работа.
два прохода я в прошлом примере и так показал, и то это уже извращения.
Не задача XSL разбирать данные, он должен их преобразовывать для вывода.
...
Рейтинг: 0 / 0
16.05.2012, 13:06
    #37796922
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Split и сортировка средствами xsl 1.0 c привязкой к другому элементу.
mage.lanстроится переменная ключей сортировкиКрасивая идея
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Split и сортировка средствами xsl 1.0 c привязкой к другому элементу. / 14 сообщений из 14, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]