Гость
Map
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Xslt получение данных из попарных строк таблицы / 2 сообщений из 2, страница 1 из 1
24.09.2019, 18:38
    #39866565
Подпол
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xslt получение данных из попарных строк таблицы
Добрый день... Упрощенно есть таблица
<table>
<body>
<tr>
<td>Иванов</td>
<td>Петров</td>
</tr>
<tr>
<td>
<ul>
<li>тру-ля-ля</li>
<li>тра-та-та</li>
<li>фа-фа-ля-ля</li>
</ul>
</td>
</tr>

далее в том же духе, т.е. связанная инфа лежит в попарных строках.
Нужно получить xslt-шаблоном тег вида (на имена тегов и атрибутов не смотрим), например

<коллектив композитор="Иванов" поэт="Петров">
<song namе="тру-ля-ля"/>
<song namе="тра-та-та"/>
<song namе="фа-фа-ля-ля"/>
</коллектив>

Или
<песня композитор="Иванов" поэт="Петров" namе="тру-ля-ля">
<песня композитор="Иванов" поэт="Петров" namе="тра-та-та">
<песня композитор="Иванов" поэт="Петров" namе="фа-фа-ля-ля">

Никак не получается это сделать... С точностью до смысла по второму варианты пытался изобразить что-то типа

<xsl:for-each select="//table/tr">
<xsl:choose>
<xsl:when test="count(td)>1">
<xsl:variable name="param">
<value
form="{normalize-space(td[1]/text())}"
doss="{normalize-space(td[2]/text())}"/>
</xsl:variable>
</xsl:when>
<xsl:otherwise>
<xsl:for-each select="td[1]/ul/li">
<row
form="{exsl:node-set($param)/value/@form}"
doss="{exsl:node-set($param)/value/@doss}"
name="{normalize-space(text())}"/>
</xsl:for-each>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>

Но знаний не хватило... выдает ошибку, видимо, из-за видимости переменной... гуглить тоже не получилось. Помогите, пожалуйста.
...
Рейтинг: 0 / 0
25.09.2019, 14:08
    #39866879
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Xslt получение данных из попарных строк таблицы
Подпол
Код: xml
1.
2.
3.
4.
5.
<коллектив композитор="Иванов" поэт="Петров">
  <song namе="тру-ля-ля"/>  
  <song namе="тра-та-та"/>  
  <song namе="фа-фа-ля-ля"/>
</коллектив>

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
<xsl:apply-templates select="body/table"/>

<xsl:template match="table">
  <коллектив>
    <xsl:apply-templates select="tr[1]"/>
    <xsl:apply-templates select="tr[position() &gt; 1]/td/ul/li"/>
  </коллектив>
</xsl:template>

<xsl:template match="tr">
  <xsl:attribute name="композитор">
    <xsl:value-of select="td[1]"/>
  </xsl:attribute>
  <xsl:attribute name="поэт">
    <xsl:value-of select="td[2]"/>
  </xsl:attribute>
</xsl:template>

<xsl:template match="li">
  <song name="{.}"/>
</xsl:template>


Подпол
Код: xml
1.
2.
3.
<песня композитор="Иванов" поэт="Петров" namе="тру-ля-ля">
<песня композитор="Иванов" поэт="Петров" namе="тра-та-та">
<песня композитор="Иванов" поэт="Петров" namе="фа-фа-ля-ля">

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
<xsl:apply-templates select="body/table"/>

<xsl:template match="table">
  <xsl:apply-templates select="tr[position() &gt; 1]/td/ul/li">
    <xsl:with-param name="composer" select="tr[1]/td[1]"/>
    <xsl:with-param name="poet" select="tr[1]/td[2]"/>
  </xsl:apply-templates>
</xsl:template>

<xsl:template match="li">
  <xsl:param name="composer"/>
  <xsl:param name="poet"/>
  <песня композитор="{$composer}" поэт="{$poet}" name="{.}"/>
</xsl:template>
...
Рейтинг: 0 / 0
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / Xslt получение данных из попарных строк таблицы / 2 сообщений из 2, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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