Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как добавить XML namespace при XSLTransform, и постаивить префиксы ? 
V
    Опции темы
Mr_Smith
Дата 3.8.2007, 13:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте.  Скажите, как проставить в тегах элементов выходного файла префиксы. не вручную же их в шаблоне прописывать, потому как большей частью мне нужны элементы из исходного файла и затевать ручное переписывание всех исходных тагов с шаблоне на такие же только с префиксом желания нету. Я не думаю что во втором фреймворке нет механизма по автоматизации такого дела.

Наглядный пример:
Исходник:
Код

<?xml version="1.0"?>
<root>
<data>
 <pole>8778</pole>
 <pole>89789</pole>
</data>
<data>
 <pole>8998</pole>
 <pole>89799</pole>
</data>
</root>



Должно получиться:
Код

<?xml version="1.0" encoding="UTF-8"?>
<V8Exch:_1CV8DtUD xmlns:V8Exch="http://www.1c.ru/V8/1CV8DtUD/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v8="http://v8.1c.ru/data">
<V8Exch:root>
<V8Exch:data>
 <V8Exch:pole>8778</V8Exch:pole>
 <V8Exch:pole>89789</V8Exch:pole>
</V8Exch:data>
<V8Exch:data>
 <V8Exch:pole>8998</V8Exch:pole>
 <V8Exch:pole>89799</V8Exch:pole>
</V8Exch:data>
</V8Exch:root>
</V8Exch:_1CV8DtUD>

PM MAIL ICQ   Вверх
-ser-
Дата 4.8.2007, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата

Я не думаю что во втором фреймворке нет механизма по автоматизации такого дела.

Я не думаю что фреймворк вообще должен иметь какое-то отношение к такому делу. Это задача xslt, а ее просто надо правильно написать, а если не знаешь как правильно, то напиши как умеешь.
Хоть желания у меня тоже небыло никакого, но вот что-то накарябал с ручным переписыванием. Можно написать изящнее xslt, а на результате поработать regex'ом или простыми манипуляциями со строками, это если исходный файл имеет множество разных нодов.

Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:V8Exch="http://www.1c.ru/V8/1CV8DtUD/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v8="http://v8.1c.ru/data">
    <xsl:output method="xml"/> 
    <xsl:strip-space elements="*"/>  
    <xsl:variable name="data" select="/root/data"/>
    <xsl:variable name="pole" select="/root/data/pole"/>
    <xsl:template match="/">
        <V8Exch:_1CV8DtUD>
            <V8Exch:root>
                 <xsl:apply-templates select="/root"/>
            </V8Exch:root>
        </V8Exch:_1CV8DtUD>        
    </xsl:template>    
    <xsl:template match="data">                
        <V8Exch:data>                
             <xsl:for-each select="pole">                
                 <V8Exch:pole>
                     <xsl:value-of select="."/> 
                 </V8Exch:pole>                
             </xsl:for-each>                    
        </V8Exch:data>
    </xsl:template>
</xsl:stylesheet>



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
-ser-
Дата 7.8.2007, 08:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



это немного получше

Код

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet  xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0" xmlns:V8Exch="http://www.1c.ru/V8/1CV8DtUD/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:v8="http://v8.1c.ru/data">
    <xsl:output method="xml"/> 
    <xsl:strip-space elements="*"/>  
    <xsl:variable name="data" select="/root/data"/>
    <xsl:variable name="pole" select="concat($data,'/pole')"/>
    <xsl:variable name="V8Exch" select="'V8Exch:'"/>
    <xsl:template match="data">
        <xsl:element name="{concat($V8Exch,local-name())}">            
             <xsl:for-each select="pole">
                 <xsl:element name="{concat($V8Exch,local-name())}">            
                     <xsl:value-of select="."/> 
                 </xsl:element>
             </xsl:for-each>                    
        </xsl:element>        
    </xsl:template>
    <xsl:template match="/">
        <xsl:element name="{concat($V8Exch,'_1CV8DtUD')}">
            <xsl:element name="{concat($V8Exch,'root')}">
                <xsl:apply-templates/>
            </xsl:element>
        </xsl:element>
    </xsl:template>  
</xsl:stylesheet>



--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
Mr_Smith
Дата 7.8.2007, 09:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо -ser-  

я думал что раз есть XMLNamespaceManager, то есть и способы цепляния префиксов при копировании в выходной поток. Буду делать через шаблон.
PM MAIL ICQ   Вверх
-ser-
Дата 7.8.2007, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



вот еще небольшая модификация. здесь избавились от ручного написания 'root'
вместо 
Код

<xsl:element name="{concat($V8Exch,'root')}">


можно написать
Код

<xsl:element name="{concat($V8Exch,local-name(/node()))}">

можно совершенствовать бесконечно.

Цитата

я думал что раз есть XMLNamespaceManager...

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


Это сообщение отредактировал(а) -ser- - 7.8.2007, 09:50


--------------------
"Тонкая, однако, работа." 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




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


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

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