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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> resultXML из двух XML (правильно пройти по узлам), как правильно пройти по узлам 
:(
    Опции темы
Andy_L20066
Дата 14.1.2011, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


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

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



привет

вообщем немного заплутался я из хsl, опыта работы с функциями мало. Вообщем такая задача: 
эсть xml1:
Код

<accommodations>
<accommodation>
     <acco_id>8888N</acco_id> 
     <name>Qwerty</name>
     <offcial_rating/>
</accommodation>

<accommodation>
     <acco_id>5555A</acco_id> 
     <name>Qwerty2</name>
     <offcial_rating />
</accommodation>
<accommodations>


имеется xml2:
Код

<root>
  <test date="24/12/2010">
    <codeTo>5555A</codeTo>
    <catalogCode>NV</catalogCode>
  </test>
  <test date="25/12/2010">
    <codeTo>8888N</codeTo>
    <catalogCode>LI</catalogCode>
  </test>
  <test date="26/12/2010">
    <codeTo>9999V</codeTo>
    <catalogCode>LL</catalogCode>
  </test>
</root>


вообщем на основе этих двух нужно сделать еще один xml:
Код

<results>
<result matching="yes" date="24/12/2010"> 
<!--matching="yes"если  елемент codeTo из xml2 равен елементу acco_id из xml1, иначе matсhing="no"  -->
<!--date устанавливается если matching='yes' и берется соответсвенно (из елементов где codeTo=acco_id) из xml2; если matching="no", то атрибут date должен отсутсвовать  -->
<result>
</results>


теперь то что я делаю из xsl:
Код

<xsl:stylesheet version="2.0"
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fn="http://www.w3.org/2005/xpath-functions">
    <xsl:param name="file2" select="'target/test-classes/test2.xml'" />
    <xsl:variable name="file2Doc" select="document($file2)" />
    <xsl:template match="/">
        <xsl:element name="results">
            <xsl:for-each select="accommodations/accommodation">
                <xsl:element name="result">
                    <xsl:variable name="accoCode" select="acco_id" />                        
                    <xsl:attribute name="matching">
                    <xsl:for-each select="$file2Doc/root/test/codeTo">
                                <xsl:variable name="codeTo" select="." />
                                <xsl:variable name="EXPRESSION"    select=".[fn:compare(fn:upper-case($codeTo), fn:upper-case($accoCode)) = 0]" />
                                <xsl:choose>
                                    <xsl:when test="$EXPRESSION">
                                        <xsl:value-of select="'yes'" />
                                    </xsl:when>
                                </xsl:choose>
                        </xsl:for-each>
                    </xsl:attribute>
                </xsl:element>
            </xsl:for-each>
        </xsl:element>
    </xsl:template>
</xsl:stylesheet>


1) какими средставами атрибуту matching проставлять "yes" либо "no" ... "yes" в данном случае проставляется, но "no" уже наверное как то после трансформации... надо еще раз по документу бежать...
2) вообщем неуверен как правильно сделать так чтоб во время трансформации можно было бы проверять значение атрибута matching и сетать значение date? (я сетнул атрибут matching, как потом при создании атрибута date проверить значение matching)

заранее спасибо

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


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


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

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



По какому принципу ты сравниваешь элементы codeTo и acco_id: все со всеми, или по порядку следования в документе(первый с первым, второй со вторым и т. д.)? 


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

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

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

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

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


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

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


 




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


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

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