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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> <xsl:for-each> и литералы не в елемента в xslt, нужна помощь 
:(
    Опции темы
xxxNEIxxx
Дата 7.5.2010, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 4.5.2010

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



сижу уже больше двух часов над двумя проблемами:

первая:

xml:
Код

<FAKULTET>
                        Computer Science
                <DECAN_NAME>Mike Mike</DECAN_NAME>........


xsd:
Код

<xs:complexType mixed="true">
                  <xs:sequence>
                    <xs:element name="DECAN_NAME" type="xs:string" />


а как вставить "Computer Science" в xslt? елемент вставляеться value-of, а просто содержимое не нашёл как вытянуть. чувствую прийдёться вставлять текст как атрибут для <FAKULTET>

вторая проблема:

скачайте архив, запустите в браузере и если посмотреть xml то можно понять что у элемента <KAFEDRA> по идее может быть много <NUMBER_GROUP>. нужно сделать чтоб в браузере навпротив названия кафедры могло быть две ветки разных груп. одну ветку я сделал а как применить <xsl:for-each> чтоб отображало две групы навпротив названия кафедры - я не знаю :(

Это сообщение отредактировал(а) xxxNEIxxx - 8.5.2010, 15:03

Присоединённый файл ( Кол-во скачиваний: 3 )
Присоединённый файл  XSL1.rar 2,49 Kb
PM MAIL   Вверх
diadiavova
Дата 7.5.2010, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



По первому вопросу всё просто
Код

FAKULTET/text()

Второй я не совсем уловил. Опиши что ты хочешь получить в результате в виде хтмл-кода и как он должен соответствовать исходному документу. Из объяснения я этого не понял.

Добавлено через 55 секунд
И надеюсь: ты в курсе, что твой хмл в ИЕ не пашет.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
xxxNEIxxx
Дата 7.5.2010, 23:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 4.5.2010

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



Извини что jpg, просто у меня голова раскалывается... надеюсь картинки хватит, но если нужен именно хтмл, то щя сделаю.

Добавлено @ 23:27
насчёт ИЕ не знал. просто сейчас не до ИЕ... как сделаю под оперу то буду смотреть остальные... а ты случайно не знаешь где можно почитать о хаках или о правельном коде под ИЕ?

Добавлено @ 23:31
кста, на картинки не обращай внимания что там практически все литералы в елементах -одинаковые . там будут даные о двух разных группах. протсо я в xml скопировал лемент <NUMBER_GROUP> что б показать что на одной кафедре может быть две группы.

Это сообщение отредактировал(а) xxxNEIxxx - 8.5.2010, 15:11

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  111111111.jpg 195,14 Kb
PM MAIL   Вверх
diadiavova
Дата 8.5.2010, 07:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(xxxNEIxxx @  8.5.2010,  00:24 Найти цитируемый пост)
знаешь где можно почитать о хаках

О чём? smile 
Цитата(xxxNEIxxx @  8.5.2010,  00:24 Найти цитируемый пост)
 о правельном коде под ИЕ

1.На мсдн официальная документация
2. Ресурсов по веб-дизайну и кроссбраузерной вёрстке в сети полно
3. На нашем форуме есть раздел, посвящённый вёрстке.


По поводу вопроса:
Тебе просто для групп надо написать отдельный шаблон и вставлять его в таблицу с помощью apply-tempate.
Что-то в этом роде должно выйти
Код

<?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="/">
    <html>
      <head>
        <TITLE>University</TITLE>
        <style type="text/css">
          body {
          margin: 0;
          padding: 0;
          }
          #main table {
          border: 1px solid #000;
          }
          #main table tr td{
          border: 1px solid #000;
          }
        </style>
      </head>
      <body>
        <div id="main">
          <xsl:apply-templates/>
        </div>
      </body>
    </html>

  </xsl:template>

  <xsl:template match="UNIVERSITY1/UNIVERSITY/FAKULTET">
    <table>
      <tbody>
        <tr colspan="2">
          <th>
            <xsl:value-of select="text()[1]"/>
          </th>
        </tr>
        <tr align="center">
          <td colspan="2">
            Имя декана: <xsl:value-of select="DECAN_NAME"/><br />
            Цена контракта: <xsl:value-of select="PRICE_CONTRACT"/><xsl:value-of select="PRICE_CONTRACT/@PRICE"/><br />
            Год основания: <xsl:value-of select="STARTED_DATE"/>
          </td>
        </tr>
          <xsl:apply-templates/>
      </tbody>
    </table>
  </xsl:template>
  <xsl:template match="KAFEDRA/NUMBER_GROUP">

    <tr>
      <td>
        <xsl:value-of select="../text()[1]"/>
        <br />
        <xsl:value-of select="../NAME_ZAV"/>
      </td>
      <td>
        <table>

          <tr>
            <td rowspan="5">КН-08-4</td>
            <td rowspan="3"><xsl:value-of select="KURATOR"/></td>
            <td><xsl:value-of select="KURATOR/@birthday"/></td>
          </tr>
          <tr>
            <td><xsl:value-of select="KURATOR/@MAIL"/></td>
          </tr>
          <tr>
            <td><xsl:value-of select="PERSONAL_SITE"/></td>
          </tr>
          <tr>
            <td colspan="2"><xsl:value-of select="KOL_CHEL"/></td>
          </tr>
          <tr>
            <td colspan="2"><xsl:value-of select="NAME_STUDENT"/></td>
          </tr>
        </table>
      </td>
    </tr>
  </xsl:template>
</xsl:stylesheet>




--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
xxxNEIxxx
Дата 8.5.2010, 15:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 4.5.2010

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



хух... это уже вообще... нифига не могу понять суть работы <xsl:apply-templates/>..... кажетсья таким элементарным но в тоже время какое то запутаное.......

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

Это сообщение отредактировал(а) xxxNEIxxx - 8.5.2010, 15:39
PM MAIL   Вверх
diadiavova
Дата 8.5.2010, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(xxxNEIxxx @  8.5.2010,  16:30 Найти цитируемый пост)
 нифига не могу понять суть работы <xsl:apply-templates/>..... 

Он просто добавляет результат обработки указанных узлов(по умолчанию - непосредственные потомки узла-контекста).


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
xxxNEIxxx
Дата 8.5.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 4.5.2010

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



я вижу что оно отображаеться практически так как я хотел, но я не могу понять каким боком оно указывает что за чем должно идти. ощущения что просто налеплена куча template и  apply-templates без никакой связи между ними. в инете смотрел примеры использования, то там хотя бы select есть, но всё равно как то странно они расположены....
 
З.Ы. можешь бросить какую нибудь ссылку где есть хорошый пример использования apply-templates с полным обьяснением.
PM MAIL   Вверх
xxxNEIxxx
Дата 8.5.2010, 18:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 4.5.2010

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



ура)) немного начало проясняться))) осталось с последовательностью прописания елементов в template розобраться и думаю всё будел супер))

З.Ы. я приблизительно понял зачем и что означает <xsl:output method="html" indent="yes"/>, но можешь своими словами обьяснить?

PM MAIL   Вверх
diadiavova
Дата 8.5.2010, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(xxxNEIxxx @  8.5.2010,  19:05 Найти цитируемый пост)
З.Ы. я приблизительно понял зачем и что означает <xsl:output method="html" indent="yes"/>, но можешь своими словами обьяснить?

Этот элемент указывает каким образом производится вывод. Для хмл и хтмл способы отличаются, ну например пустой тег div в хмл будет отображаться так
Код

<div/>
В хтмл это недопустимо. Указывая выходные параметры ты даёшь процессору инструкцию о том, что хочешь получить. Атрибуты и их значения описаны в документации.

На счёт темплейтов: это просто функции, вызывая их в некотором месте документа, ты вставляешь в это место результат их работы. Вызвать функцию можно либо call-template'ом, либо apply-templates'ом.
Когда ты используешь колтемплейт, это подобно вызову функции в традиционных языках, там объяснять особо нечего, а вот эпплайтемплейт вызывает не сами функции, а обработку некоторого набора узлов. Этот набор указывается либо в атрибуте селект, либо по умолчанию используются дочерние узлы контекста(как я уже написал). Для каждого узла набора выбирается подходящий шаблон, которому и передётся узел, а результат обработки всех узлов вставляется в то место где расположен эпплайтемплейт.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
xxxNEIxxx
Дата 8.5.2010, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 4.5.2010

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



насчёт сути метода я понял. а можешь написать в каком случае нужно писать хмл? 
а, indent="yes", зачем в моём случае?

я уже розобрался с "эпли-темплейтом", вроди как полностью)) а вот насчёт call-template'а можешь навести пример когда нужно его использовать? когда и зачем "эпли.." я уже понял, а насчёт "кол-темплейта " хочеться на будущее знать) чтоб потом не ломать себе голову))

З.Ы. я уже зделал полностью таблицу, только есть пара маленьких проблем) 

сомтри, есть xml:

                                                        
Код

 <NUMBER_GROUP>
                        grupa_N2
                    <KURATOR birthday="1970" MAIL="[email protected]">Masha</KURATOR>
                    <KOL_CHEL>23</KOL_CHEL>
                    <NAME_STUDENT>ania</NAME_STUDENT>
                    <NAME_STUDENT>masha</NAME_STUDENT>
                    <NAME_STUDENT>dasha</NAME_STUDENT>
                </NUMBER_GROUP>



вот xsl:
     
Код

<table>
            ...........................
            ...........................
            <tr>
             <td colspan="2"><xsl:apply-templates select="NAME_STUDENT"/></td>
           </tr>
        </table>
    </xsl:template>




    <xsl:template>
    <xsl:value-of select="NAME_STUDENT"/>
     </xsl:template>



все имена отображаються в браузере в одну строку. как сделать так что б они все отображались так же само в одной ячейке таблицы  только каждое имя с новой строки. кароч чтото типа <br /> после каждого имени. я добавлю jpg что б было видно  что я хочу

и только что вспомнил, я обвёл синим елемент который в xsd задано значение что он не обязательный. и во второй таблице его нету но там есть пустая ячейка. вот, можно как нибудь убрать во второй таблице пустую ячейку?

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  111111111.jpg 118,96 Kb
PM MAIL   Вверх
diadiavova
Дата 8.5.2010, 19:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(xxxNEIxxx @  8.5.2010,  20:24 Найти цитируемый пост)
насчёт сути метода я понял. а можешь написать в каком случае нужно писать хмл? 

В случае, когда нужен хмл-документ.
Цитата(xxxNEIxxx @  8.5.2010,  20:24 Найти цитируемый пост)
 indent="yes", зачем в моём случае?

В твоём - не знаю, вообще для форматирования текста. Индент - это отступ, не будет его - выходной текст просто будет трудночитаемым, а так с него толку нет.
Цитата(xxxNEIxxx @  8.5.2010,  20:24 Найти цитируемый пост)
а вот насчёт call-template'а

Это обычный вызов функции по имени...и всё. Надо какие-нибудь данные обработать определённым образом - вызываешь шаблон, передаёшь ему эти данные как аргументы и вуаля smile 
Цитата(xxxNEIxxx @  8.5.2010,  20:24 Найти цитируемый пост)
кароч чтото типа <br /> после каждого имени.

Просто добавь br. Не надо ничего мудрить, всё намного проще, чем кажтся на первый взгляд.
Цитата(xxxNEIxxx @  8.5.2010,  20:24 Найти цитируемый пост)
 вот, можно как нибудь убрать во второй таблице пустую ячейку? 

Проверяй наличие данных с помощью ифа: есть данные - вставляй ячейку, нет... smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
xxxNEIxxx
Дата 9.5.2010, 15:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 4.5.2010

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



насчёт ифа я понял, вот попробую сделать. а вот насчёт "бр" это посложнее, так как там через темплейт вызываються все елементы NAME_STUDENT и куда мне там "бр" всунуть? вроди как везде пробывал тулить...

как я знаю с хтмл - индент это отступ в начале абзаца, а в хмл так же само он работает? ну не считая что здесь нельзя задать длину отступа.

З.Ы. и ещё одно, ты написал в предыдущем сообщении "../text()[1]", что значит та единичка в квадратных скобках? типа номер текстового содержимого?
PM MAIL   Вверх
diadiavova
Дата 9.5.2010, 17:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(xxxNEIxxx @  9.5.2010,  16:57 Найти цитируемый пост)
и куда мне там "бр" всунуть?

Вместо
Код

<td colspan="2"><xsl:value-of select="NAME_STUDENT"/></td>
напиши
Код

<td colspan="2">
    <xsl:for-each select="NAME_STUDENT">
        <xsl:value-of select="."/><br/>
    </xsl:for-each>
</td>
Там правда в конце лишний обрыв строки получится, убрать его можно, но только много лишнего кода нужно, так что если это не страшно - так оставь. А вообще в одну ячейку лучше несколько строк не пихать. Или можно сделать вложенную таблицу. Варианты есть кароч. smile 
Цитата(xxxNEIxxx @  9.5.2010,  16:57 Найти цитируемый пост)
как я знаю с хтмл - индент это отступ в начале абзаца, а в хмл так же само он работает?

Indent - это вообще отступ. В этих форматах он не работает вообще, но код с ним более читабелн.
Цитата(xxxNEIxxx @  9.5.2010,  16:57 Найти цитируемый пост)
З.Ы. и ещё одно, ты написал в предыдущем сообщении "../text()[1]", что значит та единичка в квадратных скобках? типа номер текстового содержимого? 

Номер текстового узла, без единички выражение возвращает коллекцию из всех текстовых узлов в данном контексте. Вообще с текстовыми узлами надо поосторожней обращаться, в твоём случае лучше для номера группы отдельный элемент создать. Мне непонятно почему ты этого не сделал.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
xxxNEIxxx
Дата 10.5.2010, 00:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 27
Регистрация: 4.5.2010

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



Код

<td colspan="2">
    <xsl:for-each select="NAME_STUDENT">
        <xsl:value-of select="."/><br/>
    </xsl:for-each>
</td>


когда ещё начинал читать о хсл то увидел похожий пример и не мог понять что значит точка в селекте:   <xsl:value-of select="."/>?





я не создал отдельный элемент потому что это первое что я делаю на хмл и хочу сделать как можно больше замудрённым чтоб розобратся хотя бы на каком то уровне хмл smile это простая лабораторная которую можно было сделать даже в виде таблицы 7 на 8 с использованием только фор-ич)) просто в моём случае: я на первом курсе запустил учёбу и в итоге не шарю совсем в программировании, поэтому начал сам учить вёрстку и теперь решил что нужно учить всё что связано с ВЕБом как можно больше углублённо чтоб после универа не быть полным дурачком))). На лето планирую начать учить php с самого нуля, так как в нас в универе его не преподают совсем. Кста, я не знаю какой сложности бывает xml+xsl, поэтому можешь приблизительно оценить сложность моего xml+xsl в процентах от 0 до 100% smile я понимаю что не очень высоко, ну хотя бы хочется знать сколько ещё мне нужно разбираться до нормального уровня)

З.Ы. можешь посоветовать какой нибудь сайт на котором можно розобраться до нормального уровня в xml, xsd и xsl.
PM MAIL   Вверх
diadiavova
Дата 10.5.2010, 09:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 22
Всего: 142



Цитата(xxxNEIxxx @  10.5.2010,  01:31 Найти цитируемый пост)
когда ещё начинал читать о хсл то увидел похожий пример и не мог понять что значит точка в селекте:   <xsl:value-of select="."/>?

Текущий узел. В более длинных выражениях её иногда можно пропустить, но если надо получить значение текущего узла - используй точку.
Цитата(xxxNEIxxx @  10.5.2010,  01:31 Найти цитируемый пост)
я не создал отдельный элемент потому что это первое что я делаю на хмл и хочу сделать как можно больше замудрённым чтоб розобратся хотя бы на каком то уровне хмл

Ну тогда конечно.
Цитата(xxxNEIxxx @  10.5.2010,  01:31 Найти цитируемый пост)
Кста, я не знаю какой сложности бывает xml+xsl,

Я тоже smile 
Цитата(xxxNEIxxx @  10.5.2010,  01:31 Найти цитируемый пост)
З.Ы. можешь посоветовать какой нибудь сайт на котором можно розобраться до нормального уровня в xml, xsd и xsl. 

Простой запос в гуголь даст кучу вариантов. Это очень широко используемые форматы, так что сайтов о них очень много. Можно книжку каку-нибудь почитать(потолще smile ), там к вопросу сможешь подойти более системно, поскольку когда дёргаешь всё из разных мест - авторы часто повтряют одно и то же, а толстая книга излагает разный материал последовательно.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Страницы: (3) Все [1] 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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