powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML>XSL>HTML: повторяющиеся фрагменты
5 сообщений из 5, страница 1 из 1
XML>XSL>HTML: повторяющиеся фрагменты
    #37398166
Удирающий_от_Access
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

Не часто мне приходится заниматься трансформациями XML/XSLT, поэтому необходима помощь знающего человека.

Вот у меня есть такой XML код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
<LayoutTable>
        <LayoutTable_Row>
            <LayoutTable_Cell id="cell_ljkllk_1" />
            <LayoutTable_Cell id="cell_fgjhgh2">
                <LayoutTable>
                    <LayoutTable_Row>
                        <LayoutTable_Cell id="cell_1dfgdhgf_2">
                        </LayoutTable_Cell>
                    </LayoutTable_Row>
                </LayoutTable>
            </LayoutTable_Cell>
        </LayoutTable_Row>
    </LayoutTable>

Его надо трансформировать в следующий вид:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<table>
    <tr>
        <td>
        </td>
        <td>
            <table>
                <tr>
                    <td>
                    </td>
                </tr>
            </table>
        </td>
    </tr>
</table>


Как видно, LayoutTable обозначает HTML таблицу, LayoutTable_Row - тэг TR, а LayoutTable_Cell - тэг TD соответственно.

Число вложений может быть бесконечным, т.е. таблица в таблице.

Это мой код:

Код: plaintext
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.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet
        version="1.0"
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        xmlns:msxsl="urn:schemas-microsoft-com:xslt"
        exclude-result-prefixes="msxsl">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="/">
        <xsl:call-template name="table" />
    </xsl:template>
    <xsl:template name="table">
        <table>
            <xsl:call-template name="tr" />
        </table>
    </xsl:template>
    <xsl:template name="tr">
        <tr>
            <xsl:call-template name="td" />
        </tr>
    </xsl:template>
    <xsl:template name="td">
        <td>
            <xsl:if test="LayoutTable">
                <xsl:call-template name="table" />
            </xsl:if>
        </td>
    </xsl:template>
</xsl:stylesheet>



Что в нём не так?
...
Рейтинг: 0 / 0
XML>XSL>HTML: повторяющиеся фрагменты
    #37398202
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удирающий_от_Access,

Навскидку, для начала:
В template вместо name должно быть match, и значениями match должны быть элементы исходного xml
Вместо call-template - apply-templates.
...
Рейтинг: 0 / 0
XML>XSL>HTML: повторяющиеся фрагменты
    #37398588
Удирающий_от_Access
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg, воспользовался вашим советом.

Сделал так:

Код: plaintext
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.
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet 
        version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
        xmlns:msxsl="urn:schemas-microsoft-com:xslt" 
        exclude-result-prefixes="msxsl">
    <xsl:output method="html" indent="yes"/>
    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>
    <xsl:template match="LayoutTable">
        <table>
            <xsl:apply-templates />
        </table>
    </xsl:template>
    <xsl:template match="LayoutTable_Row">
        <tr>
            <xsl:apply-templates />
        </tr>
    </xsl:template>
    <xsl:template match="LayoutTable_Cell">
        <td>
            <xsl:apply-templates />
        </td>
    </xsl:template>
</xsl:stylesheet>



A это XML:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
<?xml version="1.0" encoding="utf-8" ?>
<Layouts>
        <LayoutTable>
            <LayoutTable_Row>
                <LayoutTable_Cell id="cell_31129a8ad7">
                    <LayoutTable_Table>
                        <LayoutTable_Row>
                            <LayoutTable_Cell id="cell_b966d4d492" />
                        </LayoutTable_Row>
                    </LayoutTable_Table>
                </LayoutTable_Cell>
            </LayoutTable_Row>
        </LayoutTable>
    </Layouts>


Выдает результат:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
<table>
  <tr>
    <td>
      <tr>
        <td></td>
      </tr>
    </td>
  </tr>
</table>


Пропадает тэг <table>.

Где грабли?
...
Рейтинг: 0 / 0
XML>XSL>HTML: повторяющиеся фрагменты
    #37398796
refreg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Удирающий_от_Access,

Где шаблон для LayoutTable_Table ?
...
Рейтинг: 0 / 0
XML>XSL>HTML: повторяющиеся фрагменты
    #37453359
mage.lan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
refreg,
суров. помог бы человеку.

<xsl:template match="LayoutTable|LayoutTable_Table">
<table>
<xsl:apply-templates />
</table>
</xsl:template>
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / XML, XSL, XPath, XQuery [игнор отключен] [закрыт для гостей] / XML>XSL>HTML: повторяющиеся фрагменты
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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