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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подскажите выражение для связывания, связать два элемента с помощью XPATH 
V
    Опции темы
Mr_Smith
Дата 3.8.2007, 07:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте. 
у меня такая проблема
есть исходный иксмл:

Код

<?xml version="1.0"?>
<root>
<Ref27>
 <ID>8778</ID>
 <Pole>89789</Pole>
 <IDKontragent>555</IDKontragent>
</Ref27>
<Ref27>
 <ID>8998</ID>
 <Pole>89799</Pole>
 <IDKontragent>555</IDKontragent>
</Ref27>

<Ref32>
 <ID>555</ID>
 <Pole>89799</Pole>
</Ref32>
<Ref32>
 <ID>777</ID>
 <Pole>89799</Pole>
</Ref32>
</root>


и конечный, в котором в элемент Ref32 нужно добавить элементы <doc></doc> значением которых будет id элементов из Ref27, IDKontragent  которых = ID Ref32

Просто говоря:   для каждого ID из ref32 надо надо проверить все IDKontragent и если есть совпадения  тогда записать ID из ref27 в Ref32 где и произошло совпадение.

Для данного примера Ref32 должен получиться таким:
Код

<Ref32>
 <ID>555</ID>
 <Pole>89799</Pole>
  <doc>8778</doc>
 <doc>8998</doc>
</Ref32>

<Ref32>
 <ID>777</ID>
 <Pole>89799</Pole>
</Ref32>
  

Подскажите Xpath выражение, которое можно применить в XSLT шаблоне чтоб сделать это? 

Ппробовал так но не могу понять систему наследований в данном случае:
Код

  <xsl:template match="Ref32">
    <ref32>
      <xsl:copy-of select="child::*"/>
      <xsl:for-each select="//Ref27">
        <xsl:if test="./IDKontragent=child::ID">
          <doc>
            <xsl:value-of select="." />
          </doc>
        </xsl:if>
      </xsl:for-each>
    </ref32>
  </xsl:template>


Это сообщение отредактировал(а) Mr_Smith - 3.8.2007, 07:31
PM MAIL ICQ   Вверх
batigoal
Дата 3.8.2007, 09:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Вроде так работает:

Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:fo="http://www.w3.org/1999/XSL/Format">

    <xsl:template match="/">
        <root>
            <xsl:apply-templates select="/root/Ref32"/>
        </root>
    </xsl:template>
    
    <xsl:template match="/root/Ref32">
        <Ref32>
            <xsl:copy-of select="child::*"/>
            <xsl:apply-templates select="/root/Ref27">
                <xsl:with-param name="id_ref32">
                    <xsl:value-of select="./ID"/>
                </xsl:with-param>
            </xsl:apply-templates>
        </Ref32>
    </xsl:template>
    
    <xsl:template match="/root/Ref27">
        <xsl:param name="id_ref32"/>
        <xsl:if test="./IDKontragent=$id_ref32">
            <doc>
                <xsl:value-of select="./ID"/>
            </doc>
        </xsl:if>
    </xsl:template>
    
</xsl:stylesheet>


Идея в том, что внутри обработки Ref32 я вызываю шаблон для Ref27, передавая ему ID в качестве параметра.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Mr_Smith
Дата 3.8.2007, 13:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо, batigoal. Человек-мышь.))))
Пока еще не пробовал, но чувствую что все заработает как надо. 
PM MAIL ICQ   Вверх
batigoal
Дата 3.8.2007, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


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

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



Заработать - заработает, сомнения только в том, что "как надо" smile


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
Mr_Smith
Дата 6.8.2007, 05:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Немного подредактировал - и все заработало как швейцарские часы.
Еще раз спасибо за помощь.
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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