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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связывание двух таблиц (XML + XSL) 
:(
    Опции темы
Лёша Тёмный
Дата 28.10.2005, 19:48 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











В XML-документе есть два набора таблиц - например "клиенты" (id, infa) и "заказы" (id, time, client_id, tovar). Необходимо связать две таблицы в одну (time, client_infa, tovar).

Есть input.xml
Код
<xml>
  <clients>
    <client id="1">
      <name>user1</name>
      <email>[email protected]</email>
    </client>
    <client id="2">
      <name>user2</name>
      <email>[email protected]</email>
    </client>
  </clients>
  <queries>
    <query id="1">
      <client id="2" />
      <tovar>tovar1</tovar>
      <time>time1</time>
    </query>
    <query id="3">
      <client id="2" />
      <tovar>tovar3</tovar>
      <time>time3</time>
    </query>
    <query id="4">
      <client id="1" />
      <tovar>tovar4</tovar>
      <time>time4</time>
    </query>
  </queries>
</xml>


Нужен output.xml (для примера xml, а вообще тут должен быть HTML).
Код
<queries>
  <query id="1">
    <client>user2</client>
    <tovar>tovar1</tovar>
    <time>time1></time>
  </query>
  <query id="3">
    <client>user2</client>
    <tovar>tovar3</tovar>
    <time>time3</time>
  </query>
  <query id="4">
    <client>user1</client>
    <tovar>tovar4</tovar>
    <time>time4</time>
  </query>
</queries>


1. Можно ли провести такое преобразование (если можно то как).
2. Стоит ли так заморачиваться или лутше генерировать в input.xml уже связанную таблицу - идея была в том, чтобы избежать избыточности в input.xml smile

  Вверх
Sardar
Дата 29.10.2005, 00:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



А что мешает при обработке query обращаться к /xml/clients/client[@id=./client/@id] - нода из clients/client, id которой совпадает с id ноды, дочерней по отношению к query? smile


--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Лёша Тёмный
Дата 29.10.2005, 14:06 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Цитата
А что мешает
- Незнание.

Ну в общем не работает:

<xsl:value-of select="/xml/clients/client[@id=2]" /> - работает, но не то.

А <xsl:value-of select="/xml/clients/client[@id=./client/@id]" /> не работает (IE 6.0)
  Вверх
Sardar
Дата 29.10.2005, 15:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бегун
****


Профиль
Группа: Модератор
Сообщений: 6986
Регистрация: 19.4.2002
Где: Нидерланды, Groni ngen

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



Ой, звиняюсь, контексты перепутал, нужно current() использовать smile

У меня так вышло:

Код
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output method="xml" indent="yes"/>
    
    <xsl:template match="xml">
        <queries>
            <xsl:apply-templates select="queries/query"/>
        </queries>
    </xsl:template>
    
    <xsl:template match="queries/query">
        <query id="{@id}">
            <client><xsl:value-of select="/xml/clients/client[@id=current()/client/@id]/name" /></client>
            <tovar><xsl:value-of select="tovar/text()" /></tovar>
            <time><xsl:value-of select="time/text()" /></time>
        </query>
    </xsl:template>
</xsl:stylesheet>



--------------------
 Опыт - сын ошибок трудных  © А. С. Пушкин
 Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik
 Оценить мои качества можно тут.
PM   Вверх
Лёша Тёмный
Дата 29.10.2005, 15:31 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











Да, я уже тоже разобрался ( http://www.w3.org/TR/xslt#misc-func ) ;)

Спасибо за помошь smile
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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