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

Поиск:

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


Новичок



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

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



Есть файл xml и файл xsl, который преобразовывает элементы в атрибуты.
Как сделать чтобы создавался новый файл xml или преобразовывался старый файл?
PM MAIL   Вверх
diadiavova
Дата 10.3.2010, 16:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Это делается при помощи специальных программ smile В принципе в основном XML-редакторы это умеют, даже самые простые типа этого
http://www.microsoft.com/downloads/details...;displaylang=en
Ну или вот можно такую вот тулзу использовать
http://www.microsoft.com/downloads/details...;displaylang=en
Вообще их много разных. Не подойдут эти - гуголь в помощь, вариантов много.

Добавлено через 1 минуту и 12 секунд
Кстати в разделе есть закреплённая тема "Программы".


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


Новичок



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

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



Я предположил, что это можно как нить без проги сделать...
PM MAIL   Вверх
diadiavova
Дата 11.3.2010, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GlooMMy @  11.3.2010,  11:22 Найти цитируемый пост)
Я предположил, что это можно как нить без проги сделать...

Всё, что делают компьютерные программы можно и руками вычислить. Только зачем? smile 


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


Новичок



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

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



как лучше преобразовать xml вида

Код

<database>
    <document form="form1">
        <item name="ShortName">
            <text>sName</text>
        </item>
        <item name="FullName">
            <text>fName</text>
        </item>
        <item name="Title">
            <text>Описание</text>
        </item>
        <item name="Creat">
            <text>Ivanov Ivan</text>
        </item>
        <item name="Created">
            <datetime dst="true">19990924T234111,61-01</datetime>
        </item>
    </document>
    <document form="form2">
        <item name="Title">
            <text>Описание</text>
        </item>
        <item name="Creat">
            <text>Ivanov Ivan</text>
        </item>
        <item name="Created">
            <datetime dst="true">19990924T234110,98-01</datetime>
        </item>
        <item name="SubTitle">
            <text>БД</text>
        </item>
    </document>
    <document form="form3">
        <item name="OriginalTime">
            <datetime dst="true">20090903T180957,91+03</datetime>
        </item>
        <item name="Title">
            <text>Описание</text>
        </item>
        <item name="Creat">
            <text>Ivanov Ivan</text>
        </item>
        <item name="Created">
            <datetime>19991219T182622,23+02</datetime>
        </item>
        <item name="SubTitle">
            <text>БД</text>
        </item>
        <item name="Count_1">
            <textlist>
                <text>1</text>
                <text>2</text>
                <text>3</text>
            </textlist>
        </item>
        <item name="CountALL_2">
            <text>4880</text>
        </item>
        <item name="CountALL_3">
            <text>5535</text>
        </item>
    </document>
</database>


вот к такому виду (с помощью xsl)

Код

<database>
    <form1 ShortName="sName" FullName="fName" Title="Описание"  Creat="Ivanov Ivan" Created="19990924T234111,61-01" />
    <form2 Title="Описание" Creat="Ivanov Ivan" Created="19990924T234110,98-01" SubTitle="БД" />
    <form3 OriginalTime="20090903T180957,91+03" Title="Описание" Creat="Ivanov Ivan" Created="19991219T182622,23+02" SubTitle="БД" Count_1="*" CountALL_2="4880" CountALL_3="5535" />
</database>


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

Вообщем как элементы преобразовать в атрибуты?
PM MAIL   Вверх
diadiavova
Дата 11.3.2010, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Код

<?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="/">
      <database>
        <xsl:apply-templates/>
      </database>
    </xsl:template>
  <xsl:template match="document">
    <xsl:element name="{@form}">
      <xsl:apply-templates select="item"/>
    </xsl:element>
  </xsl:template>
  <xsl:template match="document/item">
    <xsl:attribute name="{@name}" >
      <xsl:value-of select="./*"/>
    </xsl:attribute>
  </xsl:template>
  
</xsl:stylesheet>




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


Новичок



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

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



не совсем то что хотелось, но спасибо)
я иначе сделал
Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dxl="http://www.lotus.com/dxl" version="1.0" xmlns:xalan="http://xml.apache.org/xslt" exclude-result-prefixes="dxl">        
        <xsl:template match="dxl:database">
            <xsl:element name="dataset">
                <xsl:apply-templates select="./dxl:document" />
            </xsl:element>
        </xsl:template>        
        <xsl:template match="dxl:document">
            <xsl:element name="doc">
                <xsl:apply-templates select="./dxl:item" />
            </xsl:element>
        </xsl:template>
    <xsl:template match="dxl:item">
            <xsl:for-each select=".">
                <xsl:choose>
                    <xsl:when test='@name="."'>
                        <xsl:element name="FullName">
                                <xsl:value-of select="./dxl:text/text()" />
                        </xsl:element>
                    </xsl:when>                    
                    <xsl:otherwise>
                        <xsl:attribute name="{@name}">
                            <xsl:choose>
                                <xsl:when test="name(child::*)='text'">
                                    <xsl:apply-templates select="dxl:text" />
                                </xsl:when>
                                <xsl:when test="name(child::*)='datetime'">
                                    <xsl:apply-templates select="dxl:datetime" />
                                </xsl:when>
                                <xsl:when test="name(child::*)='textlist'">
                                    <xsl:apply-templates select="dxl:textlist" />
                                </xsl:when>
                            </xsl:choose>
                        </xsl:attribute>
                    </xsl:otherwise>
                </xsl:choose>
            </xsl:for-each>
    </xsl:template>
</xsl:stylesheet>


может можно упростить...

Добавлено через 4 минуты и 1 секунду
В вашем случаи все данные в элемент <database>...</database> записываются

Добавлено через 6 минут и 41 секунду
хотя, надо было просто под мой случай все подредактировать и все норм работаетsmile спс
PM MAIL   Вверх
GlooMMy
Дата 12.3.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Как переименовывать элементы? на примере database, form1 и Title smile

Добавлено через 1 минуту и 58 секунд
делаю вот так, но не прокатывает
Код

<xsl:template match="form1">
        <xsl:element name="F1">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

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


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


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

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



Цитата(GlooMMy @  12.3.2010,  12:07 Найти цитируемый пост)
В вашем случаи все данные в элемент <database>...</database> записываются

А надо было? smile Мой пример делает такой же документ какой был представлен в вопросе.
Цитата(GlooMMy @  12.3.2010,  12:27 Найти цитируемый пост)
Как переименовывать элементы?

Темплейты для них создать надо. Для каждого.


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


Новичок



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

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



Результат зависит от того в каком месте (в начале или в конце) определено переименование?
PM MAIL   Вверх
diadiavova
Дата 12.3.2010, 12:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(GlooMMy @  12.3.2010,  12:27 Найти цитируемый пост)
делаю вот так, но не прокатывает

Если это применить к уже преобразованному(а не первоначальному) документу - должно работать.
Цитата(GlooMMy @  12.3.2010,  12:54 Найти цитируемый пост)
Результат зависит от того в каком месте (в начале или в конце) определено переименование? 

Значит в документе есть шаблоны с более высоким приоритетом. Его в принципе можно явно задать.


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


Новичок



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

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



Лучше бы для первоначального как-нибудь...

Делаю для нового, остается только новый тег, а почему остальные данные не копятся?
Код

<?xml version="1.0" encoding="UTF-8"?>

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:dxl="http://www.lotus.com/dxl" version="1.0" xmlns:xalan="http://xml.apache.org/xslt" exclude-result-prefixes="dxl">

<xsl:output method="xml" indent="yes"/>

    <xsl:template match="database">
        <xsl:element name="db">
            <xsl:apply-templates/>
        </xsl:element>
    </xsl:template>

</xsl:stylesheet>

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


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


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

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



Цитата(GlooMMy @  12.3.2010,  13:25 Найти цитируемый пост)
Лучше бы для первоначального как-нибудь...

Для первоначального надо просто паттерн соответствия написать правильно, например вместо 
Код

        <xsl:template match="dxl:document">
написать
Код

        <xsl:template match="dxl:document[@form='form1']">
Он будет применяться только к тем элементам document, у которых атрибут form имеет значение form1 итд.

Цитата(GlooMMy @  12.3.2010,  13:25 Найти цитируемый пост)
а почему остальные данные не копятся?

Их надо копировать. apply-template для атрибутов не срабатывает.


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


Новичок



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

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



Переименовываю в новом файле атрибут

Код

    <xsl:template match="Title">
        <xsl:attribute name="T">
            <xsl:value-of select="."/>           
        </xsl:attribute>
    </xsl:template>


но что-то видимо не так, может префикс какой нужен или название элемента?..

Это сообщение отредактировал(а) GlooMMy - 12.3.2010, 13:45
PM MAIL   Вверх
diadiavova
Дата 12.3.2010, 13:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



@Title
Атрибуты так обозначаются


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

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

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

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

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


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

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


 




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


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

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