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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Преобразование XML в XML 
:(
    Опции темы
GlooMMy
Дата 12.3.2010, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашел примерчик
1:
Код

<xsl:stylesheet version="1.0"  xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ren="http://www.ora.com/namespaces/rename">

<xsl:variable name="lookup"  select="/.."/>
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="yes"/>
<xsl:template match="*">
  <xsl:choose>
<xsl:when test="$lookup/ren:element[@from=name(current())]">
  <xsl:element
        name="{$lookup/ren:element[@from=local-name(current())]/@to}">
     <xsl:apply-templates select="@*"/>
     <xsl:apply-templates/>
  </xsl:element>
</xsl:when>
<xsl:otherwise>
  <xsl:apply-imports/>
</xsl:otherwise>
  </xsl:choose>
</xsl:template>
<xsl:template match="@*">
  <xsl:choose>
<xsl:when test="$lookup/ren:attribute[@from=name(current())]">
  <xsl:attribute name="{$lookup/ren:attribute[@from=name(current())]/@to}">
<xsl:value-of select="."/>
</xsl:attribute>
</xsl:when>
<xsl:otherwise>
   <xsl:apply-imports/>
</xsl:otherwise>
  </xsl:choose>
</xsl:template>
</xsl:stylesheet>

2:
Код

<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:ren="http://www.ora.com/namespaces/rename">
<xsl:import href="TableDrivenRename.xslt"/>

<xsl:variable name="lookup"  select="document('')/*[ren:*]"/>

<ren:element from="person" to="individual"/>
<ren:attribute from="firstname" to="givenname"/>
<ren:attribute from="lastname" to="surname"/>
<ren:attribute from="age" to="yearsOld"/>
</xsl:stylesheet>


попытался для своего применить (не первоначального, а преобразованного), что-то не компилится...
я так понимаю "2" вызывает "1"
во втором задаются элементы и атрибуты которые будут переименовываться
я предположил, что данный пример для любого файла *.xml должен прокатить
Как мне это под свой пример переделать?
PM MAIL   Вверх
diadiavova
Дата 12.3.2010, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Я не изучал пример, но полагаю в строке
Код

<xsl:variable name="lookup"  select="document('')/*[ren:*]"/>
надо указать реальный адрес, вместо пустой строки.


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


Новичок



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

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



Есть 
Код

<?xml version="1.0"?>
  <db>   
   <field form="Nationality">
    <item  name="ID">1</item>
    <item  name="Code">Азербайджанец</item>
   </field>
   <field form="Nationality">
    <item  name="ID">2</item>
    <item  name="Code">Азербайджанка</item>
   </field>
   <field form="Nationality">
    <item  name="ID">3</item>
    <item  name="Code">Американец</item>
   </field>
   <field form="Nationality">
    <item  name="ID">4</item>
    <item  name="Code">Американка</item>
   </field>
</db>


хочу получить
Код

<database>
 <Nationality ID="1" Code="Азербайджанка" />
 <Nationality ID="2" Code="Азербайджанец" />
 <Nationality ID="3" Code="Американец" />
 <Nationality ID="4" Code="Американка" />
<database>


делаю вот так
Код

    <xsl:template match="/">
        <database>
            <xsl:apply-templates/>
        </database>
    </xsl:template>
    <xsl:template match="dxl:field">
        <xsl:element name="{@form}">
            <xsl:apply-templates select="dxl:item"/>
        </xsl:element>
    </xsl:template>
    <xsl:template match="dxl:item">
        <xsl:attribute name="{@name}" >
            <xsl:value-of select="./*"/>
        </xsl:attribute>
    </xsl:template>


В результате ничего... что не так?
PM MAIL   Вверх
GlooMMy
Дата 18.3.2010, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



я так понял нужно добавлять <text></text>

<item  name="ID"><text>1</text</item>

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


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


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

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



Цитата(GlooMMy @  18.3.2010,  15:50 Найти цитируемый пост)
я так понял нужно добавлять <text></text>

Зачем? smile 
Цитата(GlooMMy @  18.3.2010,  15:15 Найти цитируемый пост)
что не так? 

Проблемы с пространствами имён, твои шаблоны должны применяться к элементам соотнесённым с определённым пространством имён(кстати у тебя не видно с каким, но префикс указывает на то, что оно есть), а в исходном документе никаких пространств не указано. Ну и в 13 строке преобразования атрибут seelct неправильно определён, там просто точка нужна
Код

<?xml version="1.0" encoding="utf-8" ?>
<db xmlns="urn:dkdk">
  <field form="Nationality">
    <item  name="ID">1</item>
    <item  name="Code">Азербайджанец</item>
  </field>
  <field form="Nationality">
    <item  name="ID">2</item>
    <item  name="Code">Азербайджанка</item>
  </field>
  <field form="Nationality">
    <item  name="ID">3</item>
    <item  name="Code">Американец</item>
  </field>
  <field form="Nationality">
    <item  name="ID">4</item>
    <item  name="Code">Американка</item>
  </field>
</db>


Код

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

  <xsl:template match="/">
    <database>
      <xsl:apply-templates/>
    </database>
  </xsl:template>
  <xsl:template match="dxl:field">
    <xsl:element name="{@form}">
      <xsl:apply-templates select="dxl:item"/>
    </xsl:element>
  </xsl:template>
  <xsl:template match="dxl:item">
    <xsl:attribute name="{@name}" >
      <xsl:value-of select="."/>
    </xsl:attribute>
  </xsl:template>
</xsl:stylesheet>




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


Новичок



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

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



пространство имен было, просто тут не дописал)
а при добавлении <text> и select="./*"
все заработало...

проверил, при изменении на "." (без <text>) тож работает

Спасибо.
PM MAIL   Вверх
diadiavova
Дата 18.3.2010, 17:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GlooMMy @  18.3.2010,  16:59 Найти цитируемый пост)
а при добавлении <text> и select="./*"
все заработало.

вместо text ты мог добавить всё что угодно. Точка означает текущий узел, а ./* - дочерние узлы. Если нужный текст ты передаёшь дочернему элементу(не важно какому), то работает вторая конструкция.

Цитата(GlooMMy @  18.3.2010,  16:59 Найти цитируемый пост)
пространство имен было, просто тут не дописал

Вообще-то это важный момент, кроме того, из вопроса я понял, что вообще ничего не отображалось, а теперь выясняется, что не отображались только значения атрибутов smile 


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


Новичок



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

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



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

из этого XML
Код

<?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   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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