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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Xml В Xml через Xsl или Xquary 
:(
    Опции темы
Moonfall
Дата 7.6.2006, 18:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



вобшем такая проблема. Есть такой хмл:
<records>
<record>
<SRC_URL>http://www.j2mepolish.org/devices/Alcatel/One_Touch_735i.html</SRC_URL>
<DATES>2006-06-06 17:25:40</DATES>
<PHONE_NAME>Alcatel</PHONE_NAME>
<MODELS>One_Touch_735i</MODELS>
<PROPERTY>Screen-Size (width x height)</PROPERTY>
<VALUE1>128x128</VALUE1>
</record>
<record>
<SRC_URL>http://www.j2mepolish.org/devices/Alcatel/One_Touch_735i.html</SRC_URL>
<DATES>2006-06-06 17:25:40</DATES>
<PHONE_NAME>Alcatel</PHONE_NAME>
<MODELS>One_Touch_735i</MODELS>
<PROPERTY>Bits per Pixel</PROPERTY>
<VALUE1>12
(4,096 colors)</VALUE1>
</record>
</records>

Я получаю:
<device-list>
<device manufacturer="Alcatel" name="One_Touch_735i" src-url="http://www.j2mepolish.org/devices/Alcatel/One_Touch_735i.html" retrieval-time="2006-06-07 13:33:40">
<property name="Screen-Size (width x height)" value="128x128"/>
</device>
<device manufacturer="Alcatel" name="One_Touch_735i" src-url="http://www.j2mepolish.org/devices/Alcatel/One_Touch_735i.html" retrieval-time="2006-06-07 13:33:40">
<property name="Bits per Pixel" value="12 (4,096 colors)"/>
</device>
</device-list>

С помощью такого кода хсл:
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
    <xsl:template match="records">  
    <device-list> 
     <xsl:for-each select="record">
          <device>
          <xsl:attribute name="manufacturer"><xsl:value-of select="PHONE_NAME"/></xsl:attribute>
          <xsl:attribute name="name"><xsl:value-of select="MODELS"/></xsl:attribute>
          <xsl:attribute name="src-url"><xsl:value-of select="SRC_URL"/></xsl:attribute>
          <xsl:attribute name="retrieval-time"><xsl:value-of select="DATES"/></xsl:attribute>
          <property>
          <xsl:attribute name="name"><xsl:value-of select="PROPERTY"/></xsl:attribute>
          <xsl:attribute name="value"><xsl:value-of select="VALUE1"/></xsl:attribute>
          </property>
          </device>
       </xsl:for-each>
     </device-list>
   </xsl:template>
</xsl:stylesheet>

А нужно получить Такое: 
<device-list>
<device manufacturer="Alcatel" name="One_Touch_735i" src-url="http://www.j2mepolish.org/devices/Alcatel/One_Touch_735i.html" retrieval-time="2006-06-07 13:33:40">
<property name="Screen-Size (width x height)" value="128x128"/>
<property name="Bits per Pixel" value="12 (4,096 colors)"/>
</device>
</device-list>

Может ктонибуть помочь мне с етим? smile  
PM MAIL   Вверх
Moonfall
Дата 7.6.2006, 21:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Для тех кого етот вопрос заинтересовал ответ Мне дали на форуме 
http://www.stylusstudio.com/SSDN/default.asp?fid=48
Если есть другие варианты пишите
 
PM MAIL   Вверх
Beard
Дата 8.6.2006, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



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

<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
   <xsl:key name="src" match="record" use="concat(string(PHONE_NAME), '_', string(MODELS))" /><!--для наглядности-->

   <xsl:template match="/records">
      <device-list>
         <xsl:apply-templates select="record[generate-id(.)=generate-id(key('src',concat(string(PHONE_NAME), '_', string(MODELS))))]" />
      </device-list>
   </xsl:template>

   <xsl:template match="record">
      <device manufacturer="{PHONE_NAME}" name="{MODELS}" src-url="{SRC_URL}" retrieval-time="{DATES}">
         <xsl:call-template name="property">
            <xsl:with-param name="node" select="key('src',concat(string(PHONE_NAME), '_', string(MODELS)))" />
         </xsl:call-template>
      </device>
   </xsl:template>

   <xsl:template name="property">
      <xsl:param name="node" />

      <xsl:for-each select="$node">
         <property name="{PROPERTY}" value="{VALUE1}"/>
      </xsl:for-each>
   </xsl:template>
</xsl:stylesheet>

И киньте, плиз, прямую ссылку - все-таки интересно smile 
PM MAIL   Вверх
Moonfall
Дата 8.6.2006, 18:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Something like this? You may have to change the "concat" function to get the proper grouping logic.

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:key name="records" match="records/record" use="concat(SRC_URL, DATES, PHONE_NAME, MODELS)"/>
<xsl:template match="/">
<device-list>
<xsl:for-each select="/records/record[generate-id() = generate-id(key('records', concat(SRC_URL, DATES, PHONE_NAME, MODELS))[1])]">
<device manufacturer="{PHONE_NAME}" name="{MODELS}" src-url="{SRC_URL}" retrieval-time="{DATES}">
<xsl:variable name="keyVal" select="concat(SRC_URL, DATES, PHONE_NAME, MODELS)"/>
<xsl:for-each select="/records/record[concat(SRC_URL, DATES, PHONE_NAME, MODELS) = $keyVal]">
<property name="{PROPERTY}" value="{VALUE1}"/>
</xsl:for-each>
</device>
</xsl:for-each>
</device-list>
</xsl:template>
</xsl:stylesheet> 
PM MAIL   Вверх
Beard
Дата 8.6.2006, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



Да, по смыслу не отличаются...
Спасибо!

PS: стоит пользоваться кнопкой "Код" для кода


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

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

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

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

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


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

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


 




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


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

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