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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> XML в XML через XSLT и XPath, в тупике... 
V
    Опции темы
grindbastard
Дата 10.5.2013, 22:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Доброго всем времени суток)
Ребят, необходима помощь в преобразовании, ибо я пока полный профан в этом деле)
 
Код

<?xml version="1.0" encoding="UTF-8"?>
<FFF>
  <L1>
    <char_s name="aaa">
      <char_g name="ddd">
        <char name="ccc" value="22" />
        <char name="ccc1" value="wefef" />
        <char name="prtwwwy" value="333" />
        <char name="fffwf" value="232" />
      </char_g>
    </char_s>
  </L1>
  <P2> 
    <char_s name="awd">
      <char_g name="fffe">
        <char name="ege" value="444" />
        <char name="fwfww" value="4454" />
      </char_g>
      <char_g name="s">
        <char name="pwpw" value="34234" />
      </char_g>
      <char_g name="wdwwwwww">
        <char name="gege" value="334355" />
      </char_g>
    </char_s>
    <char_s name="pdd">
      <char_g name="rereggg">
        <char name="trjj" value="trutu" />
      </char_g>
      <char_g name="jjtjtj">
        <char name="ykky" value="6ii6k" />
      </char_g>
    </char_s>
    <char_s name="awd2">
      <char_g name="fffe2">
        <char name="ege2" value="4442" />
        <char name="fwfww2" value="4454222" />
      </char_g>
      <char_g name="s222">
        <char name="pwpw2222" value="34234222" />
      </char_g>
      <char_g name="wdwwwwww2222">
        <char name="gege2222" value="3322224355" />
      </char_g>
    </char_s>
    <char_s name="2222pdd">
      <char_g name="re2222reggg">
        <char name="trjj2222" value="tr2222utu" />
      </char_g>
      <char_g name="jjtj22222tj">
        <char name="ykk222y" value="6ii22226k" />
      </char_g>
    </char_s>
    </P2>
    </FFF>


надо "забабахать" XMLтакого вида

Код

<QQQ>
<title ege ="444" fwfww ="4454" s ="34234" 
wdwwwwww = "334355" trjj="trutu" ykky="6ii6k"  />
</QQQ>

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


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


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

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



Цитата(grindbastard @  10.5.2013,  23:11 Найти цитируемый пост)
надо "забабахать" XMLтакого вида

Вот такой код даст тебе приведенный результат вообще из любого хмл-источника.
Код

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml" indent="yes"/>

  <xsl:template match="/">
    <QQQ>
      <title ege ="444" fwfww ="4454" s ="34234"
      wdwwwwww = "334355" trjj="trutu" ykky="6ii6k"  />
    </QQQ>
  </xsl:template>
</xsl:stylesheet>

 smile


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
grindbastard
Дата 11.5.2013, 02:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



сорь, что-то натупил)) прост тут надо написать шаблон (используя XSLT и XPath) преобразующий основной XML к виду 

Код

<QQQ>
<title ege ="444" fwfww ="4454" s ="34234" 
wdwwwwww = "334355" trjj="trutu" ykky="6ii6k"  />
</QQQ>


пока смог написать лишь это 
Код

<?xml version="1.0"?>
<xsl:stylesheet version="1.0" 
xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"/>
  <xsl:template match="FFF/P2/char_s/char_g/char">
  <xsl:if test = "position()=1">
<xsl:value-of select="@name"/>
<xsl:text>=</xsl:text>
<xsl:text>"</xsl:text>
<xsl:value-of select="@value"/>
<xsl:text>"</xsl:text>
<xsl:text> </xsl:text> 
</xsl:if>
</xsl:template>  
</xsl:stylesheet>


соответственно есть вопросы))

а именно, как можно  создать собственные тэги (<QQQ>)  и как вытянуть оставшиеся атрибуты со значениями)) ибо пока что вытягивается инфа из всех char....как отсеять и оставить только то, что нужно))

Это сообщение отредактировал(а) grindbastard - 11.5.2013, 02:28
PM MAIL   Вверх
diadiavova
Дата 11.5.2013, 02:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(grindbastard @  11.5.2013,  03:27 Найти цитируемый пост)
как можно  создать собственные тэги (<QQQ>)

Они просто вставляются в то место где должны находиться.
Цитата(grindbastard @  11.5.2013,  03:27 Найти цитируемый пост)
и как вытянуть оставшиеся атрибуты со значениями))

Оставшиеся после чего и откуда вытянуть? Если надо скопировать атрибуты с какого-то элемента без изменений, то это можно сделать к примеру так
Код

    <QQQ>
      <xsl:for-each select="@*">
        <xsl:copy-of select="."/>
      </xsl:for-each>
    </QQQ>


Цитата(grindbastard @  11.5.2013,  03:27 Найти цитируемый пост)
как отсеять и оставить только то, что нужно))

В выходном документе появится только то, что ты туда вставишь.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
grindbastard
  Дата 11.5.2013, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо,с тэгами понял)))

поповоду атрибутов...тот шаблон, который написал, он получает все атрибуты из всех тегов char...а необходимо получить только конкретные и их значения, а именно ege ="444" fwfww ="4454" s ="34234" wdwwwwww = "334355" trjj="trutu" ykky="6ii6k"....каким образом можно это можно реализовать?

еще загвоздка в том, что некоторые атрибуты принадлежат тегам char_g, а их значения в char... smile 
PM MAIL   Вверх
diadiavova
Дата 11.5.2013, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(grindbastard @  11.5.2013,  03:54 Найти цитируемый пост)
тот шаблон, который написал, он получает все атрибуты из всех тегов char

Он получает все атрибуты из текущего элемента контекста. То есть какой элемент в данном случае обрабатывается, из того и копируются атрибуты.
Цитата(grindbastard @  11.5.2013,  03:54 Найти цитируемый пост)
а необходимо получить только конкретные и их значения, а именно ege ="444" fwfww ="4454" s ="34234" wdwwwwww = "334355" trjj="trutu" ykky="6ii6k"....каким образом можно это можно реализовать?

Если тебе надо скопировать конкретные атрибуты, то сфоричить не получится, по крайней мере если нельзя задать критерий фильтрации, так что в этом случае придется для каждого атрибута писать свой копи-оф.
Код

    <QQQ>
        <xsl:copy-of select="@ege"/>
        <xsl:copy-of select="@fwfww"/>
        <xsl:copy-of select="@s"/>
<!-- и так далее-->
    </QQQ>



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
grindbastard
Дата 13.5.2013, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм...ну из этой строчки(родной XML)  
Код

<char name="ege" value="444" />


воспользовавшись тем, что ты написал

Код

 <xsl:copy-of select="@ege"/>


не получится это

Код

ege ="444"


т.к. в теге char сам атрибут, как видишь - name и уже он равен ege

я привел, в самом начале, XML который должен в результате получиться....вот он еще раз

Код

<QQQ>
<title ege ="444" fwfww ="4454" s ="34234" 
wdwwwwww = "334355" trjj="trutu" ykky="6ii6k"  />
</QQQ>


если ставить конкретно задачу, то из всего начального XML надо выбрать необходимые конкретные элементы, а именно:
ege,fwfww, s,wdwwwwww,trjj,ykky, которые являются значениями атрибутов name в тегах char и char_g соответственно, 

также надо выбрать соответствующие эл-ты value,значение которых:
444,4454,34234,334355,trutu,6ii6k

т.е. например, при обработке, строчка из родного XML : <char name="ege" value="444" />
должна быть обработана по шаблону так, что бы на выходе получилась строчка такого вида: ege ="444"
и так далее по всем приведенным выше элементам (fwfww, s,wdwwwwww,trjj,ykky) )))
PM MAIL   Вверх
diadiavova
Дата 13.5.2013, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



grindbastard, Ну наконец-то ты объяснил, что тебе на самом деле надо. smile Полагаю тебе нужно это
Код

      <xsl:attribute name="ege">
        <xsl:value-of select="//char[@name = 'ege']/@value"/>
        </xsl:attribute>
Для остальных будет что-то в том же роде.
Цитата(grindbastard @  13.5.2013,  01:54 Найти цитируемый пост)
также надо выбрать соответствующие эл-ты value,значение которых:
444,4454,34234,334355,trutu,6ii6k

что значит выбрать? Вообще это выражение xpath выглядит так
Код

//*[@value = '444']
Получишь все элементы, у которых value="444"


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
grindbastard
Дата 13.5.2013, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



хм,т.е. используя  < xsl: value - of select ="//char[@name = 'ege']/@value" />  получится в результате  ege ="444", как я понимаю?))) 

а если необходимое значение атрибута находится в тегe char_g а информация из value в теге char(например < char_g name="s" > 
< char name="ccc" value= " 34234 " />...должна получиться строчка s = "34234" ) то запрос будет такой?

Код

< xsl: value - of select ="//char_g[@name = 's']/char[@value]" /> 


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


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


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

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



Цитата(grindbastard @  13.5.2013,  13:02 Найти цитируемый пост)
получится в результате  ege ="444", как я понимаю?))) 

Ну попробуй, я не проверял сами выражения, но принцип такой.
Цитата(grindbastard @  13.5.2013,  13:02 Найти цитируемый пост)
а если необходимое значение атрибута находится в тегe char_g а информация из value в теге char(например < char_g name="s" > 
< char name="ccc" value= " 34234 " />...должна получиться строчка s = "34234" ) то запрос будет такой?

Суть ты понял smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
grindbastard
Дата 14.5.2013, 00:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

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

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


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

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


 




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


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

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