Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > XML, XSL > Xml В Xml через Xsl или Xquary |
Автор: Moonfall 7.6.2006, 18:17 |
вобшем такая проблема. Есть такой хмл: <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> Может ктонибуть помочь мне с етим? ![]() |
Автор: Moonfall 7.6.2006, 21:35 |
Для тех кого етот вопрос заинтересовал ответ Мне дали на форуме http://www.stylusstudio.com/SSDN/default.asp?fid=48 Если есть другие варианты пишите |
Автор: Beard 8.6.2006, 17:28 | ||
Я бы написал так (не знаю, какой ответ дали на том форуме (хотя думаю, примерно такой же, т.к. стандартная задача), т.к. ссылка не ведет прямо на ваше сообщение, а искать - лень):
И киньте, плиз, прямую ссылку - все-таки интересно ![]() |
Автор: Moonfall 8.6.2006, 18:15 |
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> |
Автор: Beard 8.6.2006, 18:49 |
Да, по смыслу не отличаются... Спасибо! PS: стоит пользоваться кнопкой "Код" для кода |