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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как избавиться от отступов в выводе парсера? 
:(
    Опции темы
Metheo
Дата 16.1.2009, 13:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день!

Имеется .xml файл который нужно отпарсить в текстовый файл c INI-like синтакисом. Делаю на питоне средствами библиотеки 4Suite через XSLT. 
Файл c шаблонами .xsl сделал. Все вроде правильно обрабатывается в формат который я и хотел. Но меня вот чего смущает...
Откуда в выводе пустые строки между элементами вывода и такие большие отступы? Хотелось бы отровнять все по левому краю, убрать пустые строки и сохранить в таком приличном виде в файл. Это проблема парсера или можно что-то в xsl добавить?
пример:
Код

[[name Alex]]
    
     aa=12

     bb=23

               cc=d1

                                                                     d0=44
                                                                     d1=56


а надо вот так:
Код

[[name Alex]]
aa=12
bb=23
cc=d1
d0=44
d1=56


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


Опытный
**


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

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



файлы в студию, плиз! и XML и XSLT   smile 



--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
Metheo
Дата 16.1.2009, 23:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



O, si, seniore!  smile 
Вот это - xml:
Код

<NET xsi:schemaLocation="http://www.test.ru Schema.xsd"
                xmlns:ro="http://www.test.ru/router"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">

        <server xmlns="">
                <ro:router router_name="Router1">
                        <ro:cisco_series_7200>
                                <ro:cisco_model_7200>
                                        <ro:model>7200</ro:model>
                                        <ro:image>http://www.altova.com</ro:image>
                                        <ro:slot0>
                                                <ro:module_C7200-IO-2FE name_module="C7200-IO-2FE">
                                                        <ro:connect name_interface="f0/0" target_router="Router2" target_router_interface="f0/0"/>
                                                        <ro:connect name_interface="f0/1" target_router="Router3" target_router_interface="f0/1"/>
                                                </ro:module_C7200-IO-2FE>
                                        </ro:slot0>
                                        <ro:slot1>
                                                <ro:module_PA-FE-TX name_module="PA-FE-TX"/>
                                        </ro:slot1>
                                </ro:cisco_model_7200>
                        </ro:cisco_series_7200>
                </ro:router>
                <ro:router router_name="Router2">
                        <ro:cisco_series_3600>
                                <ro:cisco_model_3660>
                                        <ro:model>3660</ro:model>
                                        <ro:image>http://www.altova.com</ro:image>
                                        <ro:connect name_interface="f0/0" target_router="Router1" target_router_interface="f0/0"/>
                                        <ro:connect name_interface="f0/1" target_router="Router3" target_router_interface="f0/0"/>
                                </ro:cisco_model_3660>
                        </ro:cisco_series_3600>
                </ro:router>
                <ro:router router_name="Router3">
                        <ro:cisco_series_7200>
                                <ro:cisco_model_7200>
                                        <ro:model>7200</ro:model>
                                        <ro:image>http://www.altova.com</ro:image>
                                        <ro:slot0>
                                                <ro:module_C7200-IO-2FE name_module="C7200-IO-2FE">
                                                        <ro:connect name_interface="f0/0" target_router="Router2" target_router_interface="f0/1"/>
                                                        <ro:connect name_interface="f0/1" target_router="Router1" target_router_interface="f0/1"/>
                                                </ro:module_C7200-IO-2FE>
                                        </ro:slot0>
                                </ro:cisco_model_7200>
                        </ro:cisco_series_7200>
                </ro:router>
        </server>
</NET>


Вот это - xsl:
Код

<xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform'
                xmlns:ro='http://www.test.ru/router' version='1.0'>
<xsl:output method="text" indent="no"/>
<xsl:strip-space elements="ro:connect"/>

<xsl:template match="server">
     <xsl:apply-templates/>
</xsl:template>
<xsl:template match="ro:router">
[[router <xsl:value-of select="@router_name"/>]]
 <xsl:apply-templates/>
</xsl:template>

<xsl:template match="ro:model">
model=<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="ro:image">
image=<xsl:value-of select="."/>
</xsl:template>

<xsl:template match="ro:connect">
<xsl:value-of select="@name_interface"/>=<xsl:value-of select="@target_router"/><xsl:text> </xsl:text><xsl:value-of select="@target_router_interface"/>
</xsl:template>

<xsl:template match="ro:slot0">
slot0=<xsl:call-template name="modules"/>
<xsl:apply-templates/>
</xsl:template>

<xsl:template match="ro:slot1">
slot1=<xsl:call-template name="modules"/>
<xsl:apply-templates/>
</xsl:template>

<xsl:template name="modules">
<xsl:for-each select="ro:module_C7200-IO-2FE">
<xsl:value-of select="@name_module"/>
</xsl:for-each>
<xsl:for-each select="ro:module_PA-FE-TX">
<xsl:value-of select="@name_module"/>
</xsl:for-each>
</xsl:template>

Вот таков вывод парсера:
Код

[root@gamma test_socket]# python parser3




[[router Router1]]




model=7200

image=http://www.altova.com

slot0=C7200-IO-2FE

                                                        f0/0=Router2 f0/0
                                                        f0/1=Router3 f0/1



slot1=PA-FE-TX






[[router Router2]]




model=3660

image=http://www.altova.com
                                        f0/0=Router1 f0/0
                                        f0/1=Router3 f0/0




[[router Router3]]




model=7200

image=http://www.altova.com

slot0=C7200-IO-2FE

                                                        f0/0=Router2 f0/1
                                                        f0/1=Router1 f0/1









А вот как надо чтобы это выглядело:
Код

[[router Router1]]
model=7200
image=http://www.altova.com
slot0=C7200-IO-2FE
f0/0=Router2 f0/0
f0/1=Router3 f0/1
slot1=PA-FE-TX
[[router Router2]]
model=3660
image=http://www.altova.com
f0/0=Router1 f0/0
f0/1=Router3 f0/0
[[router Router3]]
model=7200
image=http://www.altova.com
slot0=C7200-IO-2FE
f0/0=Router2 f0/1
f0/1=Router1 f0/1


В принципе все устраивает, файл имеет нужный формат, отступы и лишние строки можно потом убрать вторичной обработкой в питоне, но хочется ведь и шашечки и ехать. 
Да! Может есть замечания  и предложения по улучшизмам в файле xsl ?  smile 
А то я вчера только сляпал ее после пары часов с W3C рекомендациями на коленке  smile 

Это сообщение отредактировал(а) Metheo - 16.1.2009, 23:35
PM MAIL   Вверх
sir_nuf_nuf
Дата 19.1.2009, 10:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



За место 
Код

<xsl:template match="ro:router">
[[router <xsl:value-of select="@router_name"/>]]
 <xsl:apply-templates/>


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

<xsl:template match="ro:router">
  <xsl:text>[[router </xsl:text>
  <xsl:value-of select="@router_name"/>
  <xsl:text>]] </xsl:text>
 <xsl:apply-templates/>


В других местах аналогично


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "XML/XSLT"
diadiavova

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

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

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

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


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

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


 




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


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

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