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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование xml в xhtml, Возможно ли следующее: 
:(
    Опции темы
izOne
  Дата 5.1.2006, 16:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Возможно ли сделать преобразвание что бы из:

model.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<document>
    <options></options>
    <meta>
        <authors></authors>
        <title>Заголовок</title>
        <description>Описание</description>
        <keywords>
            <keyword>Ключевое слово</keyword>
        </keywords>
    </meta>
    <content>
        <model id="module-news">
            <news oid="1" link="http://site.org/news/2004/1" active="0">Заголовок №1</news>
            <news oid="2" link="http://site.org/news/2005/2" active="1">Заголовок №2</news>
            <news oid="3" link="http://site.org/news/2006/3" active="0">Заголовок №3</news>
        </model>
    </content>    
</document>


и view.html.xml
Код

<?xml version="1.0" encoding="UTF-8"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
</head>
<body>
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
    <tr id="module-news">
        <td>
            <ul>
                <li id="module-news-row-default" class="anchor"><a href="">По-умолчанию</a></li>
                <li id="module-news-row-current">Выбранный</li>
            </ul>
        </td>
    </tr>
</table>
</body>
</html>


Получить на выходе:
Код

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Test</title>
</head>
<body>
<table width="100%"  border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td>
            <ul>
                <li><a href="http://site.org/news/2004/1.htm">Заголовок №1</a></li>
                <li class="anchor">Заголовок №2</li>
                <li><a href="http://site.org/news/2006/3.htm">Заголовок №3</a></li>
            </ul>
        </td>
    </tr>
</table>
</body>
</html>


Если да, то как связать два входных xml + один xsl?
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
maxim1000
Дата 6.1.2006, 02:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата

Если да, то как связать два входных xml + один xsl?

1-й xml - тот, который обрабатывается
2-й - через функцию document
пример:
Код

<xsl:for-each select="document("qqq.xml")//news">
...


Цитата

Возможно ли сделать преобразвание что бы из

честно говоря, так и не понял, какое именно преобразование нужно
лучше бы его описать, а не просто примером...


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


Бывалый
*


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

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



maxim1000
Хочется того, чтобы блоки в шаблоне web-странички задавались кодером посредством аттрибутов id, а небыло чего-то типа

Код

<table width="100%" border="0" cellpadding="0" cellspacing="0">
<!-- ^: m_news : -->
    <tr>
        <td>
        <div class="announce">
            <span class="date">{M.NEWS.DATE}</span>&nbsp;<a href="{M.NEWS.HREF}">{M.NEWS.TITLE}</a>
        </div>
        <div class="short">{M.NEWS.SHORT}</div><br>
        </td>
    </tr>
<!-- $: m_news : -->
</table>


В идеале:
1. скриптом генерить данные(model.xml)
2. кодер пишет шаблон(view.html.xml, view.xul.xml).
3. xsl'ем заполняем шаблон данными, причем сам xsl не должен содержать никаких html(xul)-тегов, а только выполнить трансформацию шаблона в готовую страничку...
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
izOne
Дата 6.1.2006, 17:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Что-то дальше
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="/">
        <xsl:apply-templates />
    </xsl:template>
    <xsl:template match="//*[@xid='module-news']">
        <xsl:for-each select="document('file://D:\Program Files\XTrans\test\model.xml')//content/model[@id='module-news']/*">
            <xsl:call-template name="process-news">
                <xsl:with-param name="object"> <xsl:copy-of select="current()" /> </xsl:with-param>
            </xsl:call-template>
        </xsl:for-each>
    </xsl:template>

    <xsl:template name="process-news">
        <xsl:param name="object"/>
        ^<xsl:value-of select="$object" />$
        <!--
        <xsl:choose>
            <xsl:when test="$object[@active='1']">
                <xsl:text>блок активной новости</xsl:text>
            </xsl:when>
            <xsl:otherwise>
                <xsl:text>блок неактивной новости</xsl:text>
            </xsl:otherwise>
        </xsl:choose>
        -->
        <!-- <xsl:for-each select="."></xsl:for-each> -->
    </xsl:template>
    
    <!--
    <xsl:template match="*">
        <xsl:copy-of select="current()" />
    </xsl:template>
    
    <xsl:template match="text()" />
    -->
</xsl:stylesheet>

не идет smile
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
IZ@TOP
Дата 12.1.2006, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



izOne, чего то ты не то делаешь.
Может я в чем то отстал, но XSL на то и XSL чтбы использовать его совместно с HTML (генерить данные и т.п.), или для генерации XML.
А при чем тут генерирование HTML из XML понять не могу. XML обычно содержит данные, XSL шаблон представление.
Добавлено @ 17:00
Что то на подобии:
Код

<!-- data.xml -->

<?xml version="1.0" encoding="windows-1251"?>
<data>
    <users>
        <user id="362">
            <name>IZ@TOP</name>
            <www>www.carnevale.ru</www>
        </user>
    </users>
</data>

Код

<!-- xsl-stylesheet.xsl -->
<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xml:space="preserve">
    <xsl:output method="html" encoding="windows-1251"/>
    
    <xsl:template match="/">
        <html>
            <!-- HTML + XSL конструкции -->
        </html>
    </xsl:template>

</xsl:stylesheet>



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
izOne
Дата 12.1.2006, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Цитата

XSL на то и XSL чтбы использовать его совместно с HTML (генерить данные и т.п.), или для генерации XML.

Не обязательно с хтмл, и скорее всего не для генерации хмл, а для преобразования одного xml'я в другой xml.

Чем макет поступивший от верстальщика не XML(xHTML)? Его ведь можно преобразовать средствами xslt в шаблон. Мне это видится следующим образом:
1. xml(макет) + xslt1 = xslt2
2. xslt2 + xml(данные) = результат

+ в том, что идет четкое разделение работы дизайнера, верстальщика, кодера и программиста.

Style-free XSLT Style Sheets
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
maxim1000
Дата 12.1.2006, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



пропустил сообщения от 6.01...
можно попробовать ввести специальные теги: MytagActiveHeader, MytagNonActiveHeader
все, кроме них копировать, а вместо них вставлять информацию из XML с данными...
кроме того, надо будет как-то формализовать, какая часть view.html.xml относится к страничке вообще, а какую часть нужно повторять для каждого элемента
представь: т.к. мы не хотим работать с XHTML тегами в нашем XSL, то и их значения он знать не будет
значит, надо ему объяснить, что список должен быть один, а элементов списка - столько, сколько заголовков, а не создавать, например, отдельную строку таблицы для каждого (тоже, кстати, выглядит логично)
для этого тоже можно будет сделать тег... вроде MytagForEachHeader, т.е. все, что снаружи будет делаться один раз, а внутренняя часть - повторяться для каждого заголовка

в результате мы получим надстройку, которая представляет собой парсер нашего языка над XSL, это еще можно было бы понять, если бы этот наш язык решал какие-то сильно другие задачи - тогда бы это можно было назвать упрощением, но делать ведь он будет практически то же самое, что и XSL (точнее, часть этого)

т.е. получится парсер "своего XSL", построенный над обычным...
у меня сильные сомнения в его эффективности...


--------------------
qqq
PM WWW   Вверх
IZ@TOP
Дата 16.1.2006, 02:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Цитата(izOne @ 12.1.2006, 20:23 Найти цитируемый пост)
Не обязательно с хтмл, и скорее всего не для генерации хмл, а для преобразования одного xml'я в другой xml.

Чем макет поступивший от верстальщика не XML(xHTML)? Его ведь можно преобразовать средствами xslt в шаблон. Мне это видится следующим образом:
1. xml(макет) + xslt1 = xslt2
2. xslt2 + xml(данные) = результат

Т.е. ты предлагаешь верстальщику вместо HTML страницы писать описание на XML для генерации оной? Мне почему то казалось что все есть несколько проще.
И по поводу генерации XML. Я разве не тоже самое сказал? Из чего еще XSL может генерировать XML? Ответ: из XML'я! smile
Добавлено @ 02:48
maxim1000, вот, вот. У меня тоже такие же сомнения smile


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
izOne
Дата 16.1.2006, 13:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



maxim1000
Цитата

можно попробовать ввести специальные теги: MytagForEachHeader, MytagNonActiveHeader


Код

    <tr tag="MytagForEachHeader">
        <td>
            <ul>
                <li tag="MytagNonActiveHeader" class="anchor"><a href="">По-умолчанию</a></li>
                <li tag="MytagActiveHeader">Выбранный</li>
            </ul>
        </td>
    </tr>

?

Такое указание тегов ведь допусимо верстальщиком?... кодер знает что такие теги есть и знает какой формат model.xml. правильно? кодер пишет xsl и при встрече @tag=MytagForEachHeader вызывает шаблон с его обрабокой столько раз, сколько новостей в model.xml. Он также знает, что если у новости стоит @active="1", то надо к обработать li[@tag=MytagActiveHeader], иначе li[@tag=MytagNonActiveHeader].

Код

<xsl:foreach ...>
    <tr>
        <td>
            <ul>
                <xsl:choose>
                <xsl:when test="./@active=1">
                <li class="anchor"><a href="">По-умолчанию</a></li>
                </xsl:when>
                <xsl:otherwise>
                <li>Выбранный</li>
                </xsl:otherwise>
                </xsl:choose>
            </ul>
        </td>
    </tr>
</xsl:foreach ...>

так делать не совсем хочется...
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
IZ@TOP
Дата 16.1.2006, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



izOne, я немного не понял описанного кода... что он вообще делает?


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
izOne
Дата 16.1.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



IZ@TOP
Если насчет последнего поста, то это приблизительный код который выдирает из model.xml новости, и заполняет ими шаблон.

Еще раз о, собственно, вопросе темы... не хочется вписывать xsl напрямую в шаблон от верстальщика. Хочется штобы верстальщик задавал тегами(напр. tag="") участки шаблона, чтобы потом кодер мог использовать их в xslt-листе.
При этом если верстальщик изменяет структуру шаблона, то это изменение не требует изменения xslt.

Такое вообще, в принципе возможно???
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
maxim1000
Дата 16.1.2006, 20:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(izOne @ 16.1.2006, 13:55 Найти цитируемый пост)

Код

    <tr tag="MytagForEachHeader">
        <td>
            <ul>
                <li tag="MytagNonActiveHeader" class="anchor"><a href="">По-умолчанию</a></li>
                <li tag="MytagActiveHeader">Выбранный</li>
            </ul>
        </td>
    </tr>


ну, вообще-то, я имел в виду просто:
Код

    <MytagForEachHeader>
    <tr tag="">
        <td>
            <ul>
                <MytagNonActiveHeader><li class="anchor"><a href="">По-умолчанию</a></li></MytagNonActiveHeader>
                <MytagActiveHeader><li>Выбранный</li></MytagActiveHeader>
            </ul>
        </td>
    </tr>
    </MytagForEachHeader>

но можно и так, как у тебя...
твой вариант уменьшает количество текста, которое надо написать, но ним неудобно будет пользоваться, если, например, какой-нибудь тэг (из нововведенных) будет содержать в себе несколько html-ских, тогда получится, что свойство tag относится только к первому, а дизайнер (к примеру) хотел, чтобы относился к этому и следующему...

smile кстати, я думал, что строка будет одна, а для каждого заголовка будет заводиться свой элемент списка, вот хорошая иллюстрация необходимости тэга MytagForEachHeader smile

Цитата

так делать не совсем хочется...

основной вопрос - почему?
может показаться, что я навязываю отказ от идеи этой темы - ни в коем случае, просто я считаю, что лучше здесь все-таки использовать xsl и мне интересны аргументы против этого...
если вопрос в том, что для написания такого текста нужно знать xsl - совсем необязательно, можно просто рассказать дизайнеру про несколько тегов оттуда (xsl:for-each, xsl:if) или даже про несколько способов их использования:
<xsl:for-each select="...">
<xsl:if test="@active=1">
<xsl:if test="@active=0">
и пусть они для него будут просто строчками ничего не значащего кода
это, в некотором смысле, - просто заменители тех тегов, которые я предложил...


--------------------
qqq
PM WWW   Вверх
IZ@TOP
Дата 16.1.2006, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Цитата(izOne @ 16.1.2006, 16:54 Найти цитируемый пост)

Хочется штобы верстальщик задавал тегами(напр. tag="") участки шаблона, чтобы потом кодер мог использовать их в xslt-листе.
При этом если верстальщик изменяет структуру шаблона, то это изменение не требует изменения xslt.


izOne, если подобное возможно я бы хотел это увидеть собственными глазами smile
Добавлено @ 23:18
Хотя по моему это изврат... да и если посмотреть предложения о найме верстальщиков, там почти всегда встречается требование о знании XSLT.
Добавлено @ 23:21
izOne, тем более то что ты хочешь, по моему скромному мнению, это тоже самое что писать на РНР парсер мини РНР.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
izOne
Дата 17.1.2006, 00:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



IZ@TOP
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:variable name="model" select="'./model.xml'"/>
    <xsl:variable name="view"  select="'./view.html.xml'"/>

    <xsl:template match="/" >
        <xsl:apply-templates/>
    </xsl:template>

    <xsl:template match="*|@*">
        <xsl:choose>
            <xsl:when test="@mode='drop'">
                <xsl:choose>
                    <!-- Новости -->
                    <xsl:when test="@bid='module-news-row-n'">
                        <xsl:call-template name="module-news-row" />
                    </xsl:when>
                </xsl:choose>
            </xsl:when>
            <xsl:otherwise>
                <xsl:copy><xsl:apply-templates /></xsl:copy>
            </xsl:otherwise>
        </xsl:choose>
    </xsl:template>

    <xsl:template name="module-news-row">
        <!-- ^ Новости ^ -->
        <xsl:for-each select="document($model)//document/content/model[@id='module-news']/news">
            <xsl:variable name="row-a" select="document($view)//*/tr[@bid='module-news-row-a']" />
            <xsl:variable name="row-n" select="document($view)//*/tr[@bid='module-news-row-n']" />
            <xsl:variable name="href" select="@link" />
            <xsl:variable name="title" select="." />
            <xsl:choose>
                <!-- Текст -->
                <xsl:when test="@active=1">
                    <xsl:for-each select="$row-a">
                        <xsl:copy>
                            <xsl:apply-templates select=".">
                                <xsl:with-param name="href" select="$href" />
                                <xsl:with-param name="title" select="$title" />
                            </xsl:apply-templates>
                        </xsl:copy>
                    </xsl:for-each>
                </xsl:when>
                <!-- Ссылка -->
                <xsl:otherwise>
                    <xsl:for-each select="$row-n" >
                        <xsl:copy>
                            <xsl:apply-templates>
                                <xsl:with-param name="href" select="$href" />
                                <xsl:with-param name="title" select="$title" />
                            </xsl:apply-templates>
                        </xsl:copy>
                    </xsl:for-each>
                </xsl:otherwise>
            </xsl:choose>
        </xsl:for-each>
        <!-- $ Новсти $ -->
    </xsl:template>
    <xsl:template match="*[@vid='title']">
        <xsl:param name="title" />
        <xsl:param name="href" />
        <xsl:value-of select="$href" />
        <xsl:copy>
            <xsl:value-of select="$title" />
            <xsl:attribute name="href"><xsl:value-of select="$href" /></xsl:attribute>
        </xsl:copy>
    </xsl:template>
    
    <xsl:template match="a[@vid='url']">
        <xsl:param name="href" />
        <xsl:param name="title" />
        <xsl:copy>
            <xsl:value-of select="." />
            <xsl:attribute name="href"><xsl:value-of select="$href" /></xsl:attribute>
        </xsl:copy>
    </xsl:template>

</xsl:stylesheet>


Только я пока не понял почему не передается <xsl:param name="href" /> и <xsl:param name="title" /> при вызове шаблона <xsl:template match="a[@vid='url']"> вот здесь:
Код

                <!-- Ссылка -->
                <xsl:otherwise>
                    <xsl:for-each select="$row-n" >
                        <xsl:copy>
                            <xsl:apply-templates>
                                <xsl:with-param name="href" select="$href" />
                                <xsl:with-param name="title" select="$title" />
                            </xsl:apply-templates>
                        </xsl:copy>
                    </xsl:for-each>
                </xsl:otherwise>


Кто-нибудь знает почему?

maxim1000
просто сейчас приходиться самому и цмс писать/доделывать + перегонять html в шаблоны... времени не хватает на все и хочется немного облегчить себе работуsmile

Это сообщение отредактировал(а) izOne - 17.1.2006, 00:39
--------------------
Успех ждет каждого, но иногда всю жизнь.
PM Jabber   Вверх
IZ@TOP
Дата 17.1.2006, 11:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



izOne, хочешь облегчить себе работу, встраивай HTML в XSL шаблоны.

Попробуй объявлять не variable а param.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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