Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > XML, XSL > HTML+XML+XSL=HTML


Автор: jsse 2.6.2006, 00:23
  Доброго времени суток.
Помогите пожалуйста разобраться. У меня имеется HTML файл:
Код

  <html>
    <head>
      <title>***</title>
    </head>

    <body>
      <p>header</p>
      <h1>***</h1>
      <p>
         ***
      </p>
      <p>footer</p>
    </body>
  </html>


На выходе *** должны замениться на данные из XML файла с помощью правил из отдельного файла XSL.

Правильней было бы использовать XSL код внутри приведенного мной HTML и сделать XSL+XML=HTML,
НО идея такова:

1. Сгенерировать страницу HTML с помощью XSL+XML (выход - мой пример)
не хочеться делать для них потоянно преобразование, т.к. именно эти данные будут меняться очень редко допустим header(меню сайта) 
2. Сделать преобразование для динамически изменяемых данных
заменить *** на нужные мне данные

Если, то что я задумал изврат - пожалуйста подправте  smile 
Хочеться узнать ваше мнение и предложения. 

Автор: maxim1000 2.6.2006, 00:53
предложение до смеха простое:
Код

  <html>
    <head>
      <title>
        <xsl:call-template name="somename1"/>
      </title>
    </head>

    <body>
      <p>header</p>
      <h1>
        <xsl:call-template name="somename2"/>
      </h1>
      <p>
        <xsl:call-template name="somename3"/>
      </p>
      <p>footer</p>
    </body>
  </html>

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

Автор: jsse 2.6.2006, 19:05
maxim1000, а как можно при первой трансформации получить документ с xslt тєгами? 

Автор: maxim1000 2.6.2006, 19:59
упс... пропустил фразу:
Цитата(jsse @  1.6.2006,  23:23 Найти цитируемый пост)
Сгенерировать страницу HTML с помощью XSL+XML (выход - мой пример)

в принципе, подозреваю, что как-то можно это сделать
можно попробовать прямо так и написать:
<xsl:call-template name="somename1"/>
но только в шаблоне, который генерирует "описательный" HTML (который в примере), изменить название пространства имён на каоке-нибудь другое вместо xsl
(просто сейчас нет под рукой инструментария, чтобы проверить)

ну а если совсем никак не получится - всегда можно заменить вызов шаблона на <mycalltemplate1>
а потом обработать HTML XSL шаблоном, который копирует исходный XML, но когда встречает <mycalltemplate...> выполняет соответствующие действия... 

Автор: jsse 2.6.2006, 20:04
Когда я заменяю на <mycalltemplate>

не проходит даже первое преобразование - выскакивает ашипка.  smile  

Автор: maxim1000 2.6.2006, 20:32
хм... а какая ошибка там может быть?
в чём выражается?

Добавлено @ 20:33 
Цитата(jsse @  2.6.2006,  19:04 Найти цитируемый пост)
<mycalltemplate>

только, конечно же, <mycalltemplate/> (в смысле закрыть надо)
если и так не работает, то непонятно... 

Автор: jsse 4.6.2006, 13:45
Звыняйтэ - пока новичек ) нужно было закрыть тэг.

Но всё равно отошли от темы. 

Автор: Beard 5.6.2006, 17:51
Если я правильно понял - вы хотите сделать два последовательных преобразования:
После первого преобразования получить XSLT-документ, а на втором уже
его полностью "добить" до HTML:
Цитата(jsse @  2.6.2006,  19:05 Найти цитируемый пост)
а как можно при первой трансформации получить документ с xslt тєгами?  

Очень просто:
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:template match="/">
      <xsl:element name="xsl:stylesheet">
         <xsl:attribute name="version">1.0</xsl:attribute>
         <xsl:element name="xsl:template">
            <xsl:attribute name="match">/</xsl:attribute>

            <html>
               <head>
                  <title>
                      <xsl:element name="xsl:call-template">
                        <xsl:attribute name="name">mycalltemplate1</xsl:attribute>
                     </xsl:element>
                 </title>
               </head>

               <body>
                  <p>header</p>

                  <h1>
                     <xsl:element name="xsl:call-template">
                        <xsl:attribute name="name">mycalltemplate2</xsl:attribute>
                     </xsl:element>
                  </h1>
                ...
               </body>
            </html>
         </xsl:element>
      </xsl:element>
....
   </xsl:template>
</xsl:stylesheet>


Или завести, как советовал maxim1000, фиктивный неймспейс myxsl (чтоб не городить кучу xsl:elements и xsl:attribute), а потом сделать:
Код

        <xsl:element name="xsl:namespace-alias"> 
                <xsl:attribute name="stylesheet-prefix">myxsl</xsl:attribute>
                <xsl:attribute name="result-prefix">xsl</xsl:attribute>
        </xsl:element>


Только мне кажется, что заметного выигрыша в скорости не получится (или такой способ предназначен для других целей?),
да и динамически изменяемые данные лучше менять другим способом (JavaScript, например).

Лучше изложите более подробно задачу - что дано, чего вы хотите добиться, с помощью чего...

 

Автор: jsse 5.6.2006, 22:04
 Вобщем задача сводиться к тому - чтобы уменьшить кол-во запросов к БД.

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


Цитата(Beard @  5.6.2006,  17:51 Найти цитируемый пост)
и динамически изменяемые данные лучше менять другим способом 


Подскажите как?
 

Автор: Beard 6.6.2006, 00:31
Цитата(jsse @  5.6.2006,  22:04 Найти цитируемый пост)
Вобщем задача сводиться к тому - чтобы уменьшить кол-во запросов к БД.

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

Вот вы построили шаблон-каркас по какому-то XML-ку (который, как я понял, строится
по запросу из БД), а динамически изменяемые данные откуда будут браться - из того же XML-ка или нет?
И чем мы пользуемся - PHP, JSP или еще чем-нить? Может нам XML вообще не стоит генерить?
И почему все упирается в ограничение запросов к БД? Может как раз
наоборот лучше перекинуть нагрузку на СУБД, чем выполнять трансформации?

Вобщем - "Хочу все знать!". Это я не придираюсь, а просто действительно хочется подумать
над проблемой и предложить что-нить стоящее, а отправной-то точки и нет! 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)