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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Объединить несколько XML с помощь XLST. Как? 
:(
    Опции темы
Wowa
Дата 16.1.2006, 19:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



Объединить несколько XML с помощь XLST. Как?


Есть такой: http://forum.vingrad.ru/rss/forums/1.xml

И есть такой: http://forum.vingrad.ru/rss/forums/2.xml

Мне нужно, чтобы был третий файл, который содержал бы в себе записи с этих первых двух отсортированными по дате поступления записи.
PM WWW   Вверх
IZ@TOP
Дата 16.1.2006, 23:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Вот на счет "сортированными" не знаю. Но объеденить можно так

Код

<xsl:template match="/">

    <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/1.xml')/RDF/item">
        <xsl:copy-of select=".*"/>
    </xsl:for-each>
    <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/2.xml')/RDF/item">
        <xsl:copy-of select=".*"/>
    </xsl:for-each>

</xsl:template>


Вов, а не проще будет сгенерить в отдельный XML?
Добавлено @ 23:27
Хотя, думаю что можно еще попробовать XInclude задействовать, но это нужно проверять.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
maxim1000
Дата 16.1.2006, 23:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



что-нибудь вроде такого:
Код

    <xsl:for-each select="rdf:RDF/item | document('qqq.xml')/rdf:RDF/item">
      <xsl:sort select="dc:date"/>
      <xsl:copy/><!-- самое интересное, что с copy ни разу не сталкивался, так что тут может быть ошибка, но вопрос, как я понял, не в этом :) -->
    </xsl:for-each>

Добавлено @ 23:33
в принципе, можно оба документа подключать через document, и при этом обрабатывать какой-нибудь третий, например, управляющий...
P.S.
проверял на маленьких других xml-файлах
возможно, при переносе на приведенный пример получилась ошибка
так смотреть лучше только на логику...


--------------------
qqq
PM WWW   Вверх
Illuminaty
Дата 16.1.2006, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


/*Антон Захаров*/
***


Профиль
Группа: Комодератор
Сообщений: 1238
Регистрация: 19.3.2005
Где: Россия, Казань

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



Пример действий на сторонних файлах.
Пусть есть файл 1.xml
Код

<position>
    <number>1</number>
    <sometext>text 1</sometext>
</position>
<position>
    <number>3</number>
    <sometext>text 3</sometext>
</position>
<position>
    <number>5</number>
    <sometext>text 5</sometext>
</position>
<position>
    <number>7</number>
    <sometext>text 7</sometext>
</position>

Пусть есть файл 2.xml
Код

<position>
    <number>6</number>
    <sometext>text 6</sometext>
</position>
<position>
    <number>4</number>
    <sometext>text 4</sometext>
</position>
<position>
    <number>2</number>
    <sometext>text 2</sometext>
</position>

Пусть есть файл main.xml, их включающий
Код

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="main.xsl"?>
<!DOCTYPE main [
    <!ELEMENT main (position)*>
    <!ELEMENT position (number, sometext)>
    <!ELEMENT number (#PCDATA)>
    <!ELEMENT sometext (#PCDATA)>
    <!ENTITY data1 SYSTEM "1.xml">
    <!ENTITY data2 SYSTEM "2.xml">
]>
<main>
&data1;
&data2;
</main>

И, наконец, таблица стилей main.xsl
Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="main">
    <html>
        <head>
            <title>Вывод отсортированно</title>
        </head>
        <body>
                <xsl:apply-templates>
                    <xsl:sort data-type="number" select="number" />
                </xsl:apply-templates>
        </body>
    </html>
</xsl:template>
<xsl:template match="position">
<h3>
    <xsl:apply-templates select="number"/>
</h3>
<h2 align="center">
    <xsl:apply-templates select="sometext" />
</h2>
</xsl:template>
</xsl:stylesheet>


Это сообщение отредактировал(а) Illuminaty - 16.1.2006, 23:37
PM MAIL ICQ   Вверх
IZ@TOP
Дата 16.1.2006, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



maxim1000, а такое прокатит?

Код

<xsl:template match="/">
    <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/1.xml')/rdf:RDF/item | document('http://forum.vingrad.ru/rss/forums/2.xml')/rdf:RDF/item">
        <xsl:sort select="dc:date"/>
        <xsl:copy/>
    </xsl:for-each>
</xsl:template>


Вот что интересно...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
maxim1000
Дата 16.1.2006, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Цитата(IZ@TOP @ 16.1.2006, 23:36 Найти цитируемый пост)

maxim1000, а такое прокатит?

вопрос в том, что теперь оба xml достаются через document или в том, что используются http://...?
если первое - насколько я понимаю - да, все выглядит работающим
если второе - мой опыт ограничивается обработкой файлов в соседних директориях на том же компьютере smile
Добавлено @ 23:51
насчет первого варианта - точно, проверил


--------------------
qqq
PM WWW   Вверх
IZ@TOP
Дата 17.1.2006, 00:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Короче говоря, жизнь такова что работает код только с одним document в выражении, и то, только в IE:

Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        exclude-result-prefixes="rdf rss dc xsl"
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:rss="http://purl.org/rss/1.0/">
        
    <xsl:output omit-xml-declaration="yes"/>
    <xsl:output method="xml" indent="yes" encoding="windows-1251"/>

    <xsl:template match="/">
        <rdf:RDF>
            <xsl:call-template name="x"/>
        </rdf:RDF>
    </xsl:template>
    
    <xsl:template name="x">
        
        <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/1.xml', /rdf:RDF/item)">
            <xsl:sort select="rdf:date"/>
            <xsl:copy/>
        </xsl:for-each>
        
    </xsl:template>
    
</xsl:stylesheet>

Работает.

Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" 
        xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
        exclude-result-prefixes="rdf rss dc xsl"
        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:rss="http://purl.org/rss/1.0/">
        
    <xsl:output omit-xml-declaration="yes"/>
    <xsl:output method="xml" indent="yes" encoding="windows-1251"/>

    <xsl:template match="/">
        <rdf:RDF>
            <xsl:call-template name="x"/>
        </rdf:RDF>
    </xsl:template>
    
    <xsl:template name="x">
        
        <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/1.xml', /rdf:RDF/item) | document('http://forum.vingrad.ru/rss/forums/2.xml', /rdf:RDF/item)">
            <xsl:sort select="rdf:date"/>
            <xsl:copy/>
        </xsl:for-each>
        
    </xsl:template>
    
</xsl:stylesheet>

Не работает.
Добавлено @ 00:13
Возможно если сделать на подобии варианта Максима, то будет работать... не проверял... засыпаю...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
Wowa
Дата 17.1.2006, 00:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
Group Icon


Профиль
Группа: Админ
Сообщений: 15017
Регистрация: 14.9.2000
Где: Винград

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



а как же быть?
PM WWW   Вверх
IZ@TOP
Дата 17.1.2006, 00:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



ВРУ!

Вот так вроде выводит, только непонятно что...

Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:rss="http://purl.org/rss/1.0/">
        

    <xsl:output method="xml" indent="yes" encoding="windows-1251"/>

    <xsl:template match="/">
        
            <xsl:call-template name="x"/>
        
    </xsl:template>
    
    <xsl:template name="x">
        
        <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/1.xml', /rdf:RDF/item) | document('http://forum.vingrad.ru/rss/forums/2.xml', /rdf:RDF/item)">
            <xsl:sort select="rdf:date"/>
            <xsl:copy-of select="."/>
        </xsl:for-each>
        
    </xsl:template>
    
</xsl:stylesheet>



--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
maxim1000
Дата 17.1.2006, 00:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



на всякий случай вот то, на чем я проверял:
qqq.xml
Код

<?xml version="1.0" encoding="utf-8"?>
<main>
  <aaa>
    aaa
    <s>1</s>
  </aaa>
  <aaa>
    bbb
    <s>3</s>
  </aaa>
  <aaa>
    ccc
    <s>2</s>
  </aaa>
</main>

www.xml
Код

<?xml version="1.0" encoding="utf-8"?>
<main>
  <aaa>
    aaa
    <s>6</s>
  </aaa>
  <aaa>
    bbb
    <s>5</s>
  </aaa>
  <aaa>
    ccc
    <s>4</s>
  </aaa>
</main>

some.xml
Код

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet href="eee.xsl" type="text/xsl"?>
<main>
  <aaa>
    aaa
    <s>6</s>
  </aaa>
  <aaa>
    bbb
    <s>5</s>
  </aaa>
  <aaa>
    ccc
    <s>4</s>
  </aaa>
</main>

eee.xsl
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns="http://www.w3.org/TR/REC-html40">
  <xsl:template match="/">
    <xsl:for-each select="document('www.xml')/main/aaa | document('qqq.xml')/main/aaa">
      <xsl:sort select="s" order="ascending"/>
      <xsl:apply-templates select="."/>
      <br/>
    </xsl:for-each>
  </xsl:template>
</xsl:stylesheet>

IE 6-й
хотя про document читал в спецификации xsl, так что, по идее, должно работать везде... по идее smile
Добавлено @ 00:24
а если так:
Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:rss="http://purl.org/rss/1.0/">
        

    <xsl:output method="xml" indent="yes" encoding="windows-1251"/>

    <xsl:template match="/">
        
            <xsl:call-template name="x"/>
        
    </xsl:template>
    
    <xsl:template name="x">
        
        <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/1.xml')/rdf:RDF/item | document('http://forum.vingrad.ru/rss/forums/2.xml')/rdf:RDF/item">
            <xsl:sort select="rdf:date"/>
            <xsl:copy-of select="."/>
        </xsl:for-each>
        
    </xsl:template>
    
</xsl:stylesheet>
?


--------------------
qqq
PM WWW   Вверх
IZ@TOP
Дата 17.1.2006, 00:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



maxim1000, неа. Я в ворде открыл, он мне сказал что то на счет must... la-la top element ... XHTML doctype etc...


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
maxim1000
Дата 17.1.2006, 00:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



тогда, может, так:
Цитата

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
        xmlns:dc="http://purl.org/dc/elements/1.1/"
        xmlns:rss="http://purl.org/rss/1.0/">
       

    <xsl:output method="xml" indent="yes" encoding="windows-1251"/>

    <xsl:template match="/">
        <TopElement><!-- smile -->
            <xsl:call-template name="x"/>
        </TopElement>
    </xsl:template>
   
    <xsl:template name="x">
       
        <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/1.xml')/rdf:RDF/item | document('http://forum.vingrad.ru/rss/forums/2.xml')/rdf:RDF/item">
            <xsl:sort select="rdf:date"/>
            <xsl:copy-of select="."/>
        </xsl:for-each>
       
    </xsl:template>
   
</xsl:stylesheet>



--------------------
qqq
PM WWW   Вверх
IZ@TOP
Дата 17.1.2006, 00:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Панда-бир!
****


Профиль
Группа: Участник
Сообщений: 4795
Регистрация: 3.2.2003
Где: Бамбуковый лес

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



Короче говоря, нужно прогнать через какой нибудь сакс парсер рсски, потом попробовать отладить уже решение которое более или менее работает. Я если честно так и не понял чего от меня хочет ворд, но понял что что-то не совпадает.
Добавлено @ 00:38
maxim1000, с топ элементом и без работает... да чего там, вообще работает только в IE. Все остальные нафик посылают.

В общем максимум это

Код

<?xml version="1.0" encoding="windows-1251"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"

        xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
>        

    <xsl:output method="xml" indent="yes" encoding="windows-1251"/>

    <xsl:template match="/">
        <rdf:RDF>
            <xsl:call-template name="x"/>
        </rdf:RDF>
    </xsl:template>
    
    <xsl:template name="x">
        
        <xsl:for-each select="document('http://forum.vingrad.ru/rss/forums/1.xml', /rdf:RDF/item) | document('http://forum.vingrad.ru/rss/forums/2.xml', /rdf:RDF/item)">
            <xsl:sort select="rdf:date"/>
            <xsl:copy-of select="."/>
        </xsl:for-each>
        
    </xsl:template>
    
</xsl:stylesheet>

Почему выводит только текст - незнаю. В общем нужно валидатить.


--------------------
Один из розовых плюшевых-всадников апокалипсиса... очень злой...

Семь кругов ада для новых элементов языка
Мои разрозненные мысли
PM MAIL WWW ICQ Skype GTalk   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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