Распарсить XML-файл

Модератор: Модераторы разделов

god_of_vi
Сообщения: 28
ОС: Archlinux

Распарсить XML-файл

Сообщение god_of_vi »

Мне нужно распарсить приатаченный файл конфигурации IIS(MetaBase.xml) с
получением имени доменов и его биндингсов и путь где находится,
например для домена aquaknoxbeach.net, должна быть строка:
Распарсеный вид должен быть такой:
63.246.13.245:80:aquaknoxbeach.net
63.246.13.245:80:www.aquaknoxbeach.net
Path="G:\wwwroot\aquaknox_net

Вот часть кода

<IIsWebDirectory Location="/LM/W3SVC/1/Root/Setup/bin">
</IIsWebDirectory><IIsWebServer Location="/LM/W3SVC/100" ServerBindings="63.246.13.245:80:trimurti.ca 63.246.13.245:80:www.trimurti.ca" ServerComment="trimurti.ca">
</IIsWebServer><IIsWebVirtualDir Location="/LM/W3SVC/100/Root" AccessFlags="AccessRead | AccessScript" AppFriendlyName="" AppIsolated="2" AppPoolId=".NET 1.1 AppPool" AppRoot="/LM/W3SVC/100/Root" AuthFlags="AuthAnonymous | AuthNTLM" DefaultDoc="main.html,Default.htm,Default.asp,Default.aspx" DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc" HttpCustomHeaders="IISExport: This web site was exported using IIS Export v4.2 X-Powered-By: ASP.NET" Path="G:\wwwroot\trimurti.ca" UNCPassword="4963446250000000060000004000000047130fbca69e30001123ca9169cddd51ae94eb333f9
0feb0d49ffc396e1ddbb36d29e71d40adae6721c6c7a9ad18558c37c386a332789d0adad9a1828fe4
7fa5f2be1403f949e05d">
</IIsWebVirtualDir><IIsWebDirectory Location="/LM/W3SVC/100/Root/aspnet_client" AccessFlags="AccessRead" DirBrowseFlags="0">
</IIsWebDirectory><IIsWebServer Location="/LM/W3SVC/101" ServerBindings="63.246.13.245:80:www.halleluiarestaurant.com 63.246.13.245:80:halleluiarestaurant.com" ServerComment="halleluiarestaurant.com">
</IIsWebServer><IIsWebVirtualDir Location="/LM/W3SVC/101/Root" AccessFlags="AccessRead | AccessScript" AppFriendlyName="" AppIsolated="2" AppPoolId=".NET 1.1 AppPool" AppRoot="/LM/W3SVC/101/Root" AuthFlags="AuthAnonymous | AuthNTLM" DefaultDoc="main.html,Default.htm,Default.asp,Default.aspx" DirBrowseFlags="DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc" HttpCustomHeaders="IISExport: This web site was exported using IIS Export v4.2 X-Powered-By: ASP.NET" Path="G:\wwwroot\halleluiarestaurant_com" UNCPassword="4963446250000000060000004000000047130fbca69e30001123ca9169cddd51ae94eb333f9
0feb0d49ffc396e1ddbb36d29e71d40adae6721c6c7a9ad18558c37c386a332789d0adad9a1828fe4
7fa5f2be1403f949e05d">
</IIsWebVirtualDir>
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: Распарсить XML-файл

Сообщение serzh-z »

god_of_vi
Можно написать приложение на Python. Там есть удобные парсеры.
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

serzh-z писал(а):
30.07.2013 12:32
god_of_vi
Можно написать приложение на Python. Там есть удобные парсеры.


мне нужно это сделать в консоли с помощью xmllint или xsltproc
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Распарсить XML-файл

Сообщение SLEDopit »

god_of_vi писал(а):
30.07.2013 12:49
мне нужно это сделать в консоли с помощью xmllint или xsltproc
А в чём, собственно, затыка?
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21351
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Распарсить XML-файл

Сообщение Bizdelnick »

god_of_vi писал(а):
30.07.2013 11:43
Распарсеный вид должен быть такой:
63.246.13.245:80:aquaknoxbeach.net
63.246.13.245:80:www.aquaknoxbeach.net
Path="G:\wwwroot\aquaknox_net

Прямо так, с незакрытой кавычкой?
В целом - не понимаю, чего Вы хотите от форума? Задача достаточно проста, чтобы не требовалось особых подсказок, но слишком тягомотна, чтобы кто-то сделал её за Вас целиком. Хотя бы начните что-то делать, не получится - покажите свой вариант и, вероятно, Вам помогут его исправить.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

Bizdelnick писал(а):
30.07.2013 13:31
god_of_vi писал(а):
30.07.2013 11:43
Распарсеный вид должен быть такой:
63.246.13.245:80:aquaknoxbeach.net
63.246.13.245:80:www.aquaknoxbeach.net
Path="G:\wwwroot\aquaknox_net

Прямо так, с незакрытой кавычкой?
В целом - не понимаю, чего Вы хотите от форума? Задача достаточно проста, чтобы не требовалось особых подсказок, но слишком тягомотна, чтобы кто-то сделал её за Вас целиком. Хотя бы начните что-то делать, не получится - покажите свой вариант и, вероятно, Вам помогут его исправить.


Извените, мне просто понять саму суть работы этих утилит, напишите хотя бы часть самую малую, а потом склею я уже сам
Заранее спасибо
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

SLEDopit писал(а):
30.07.2013 13:18
god_of_vi писал(а):
30.07.2013 12:49
мне нужно это сделать в консоли с помощью xmllint или xsltproc
А в чём, собственно, затыка?

я не умею пользоватся этими утилитами, хотя бы часть подскажите как сделать, хотя бы самую малую
Спасибо сказали:
Аватара пользователя
Hephaestus
Сообщения: 3728
Статус: Многоуважаемый джинн...
ОС: Slackware64-14.1/14.2

Re: Распарсить XML-файл

Сообщение Hephaestus »

god_of_vi писал(а):
30.07.2013 14:31
я не умею пользоватся этими утилитами, хотя бы часть подскажите как сделать, хотя бы самую малую
Если совсем коротко, нужно писать xsl-файл, содержащий правила разбора вашего xml.
Затем это скармливается утилите xsltproc вместе с xml-файлом. На выходе получается файл в нужном Вам виде.
В качестве примера, как вообще парсить xml-файлы подойдет doсbook, ознакомьтесь, а дальше копайте на предмет составления собственных xsl-файлов под свои конкретные задачи.
Сложность тут в том, что xml описывает структуру данных. И она - эта структура - может быть очень разной.
И поэтому в каждом случае будут свои правила разбора. Вот эти самые правила Вам и предстоит написать под свой конкретный xml.
Пускай скрипят мои конечности.
Я - повелитель бесконечности...
Мой блог
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

fflatx писал(а):
30.07.2013 17:58
god_of_vi писал(а):
30.07.2013 14:31
я не умею пользоватся этими утилитами, хотя бы часть подскажите как сделать, хотя бы самую малую
Если совсем коротко, нужно писать xsl-файл, содержащий правила разбора вашего xml.
Затем это скармливается утилите xsltproc вместе с xml-файлом. На выходе получается файл в нужном Вам виде.
В качестве примера, как вообще парсить xml-файлы подойдет doсbook, ознакомьтесь, а дальше копайте на предмет составления собственных xsl-файлов под свои конкретные задачи.
Сложность тут в том, что xml описывает структуру данных. И она - эта структура - может быть очень разной.
И поэтому в каждом случае будут свои правила разбора. Вот эти самые правила Вам и предстоит написать под свой конкретный xml.


Спасибо огромное, я посмотрю... Вот так вот выглядит оригинал(кусок его)
<IIsWebServer Location ="/LM/W3SVC/100"
ServerBindings="63.246.13.245:80:trimurti.ca
63.246.13.245:80:www.trimurti.ca"
ServerComment="trimurti.ca"
>
</IIsWebServer>

Я знаю как парсить вот такой вот нод <value>инфа</value> или вот такой <value dd=инфа fef=инфа />..
Но вот не знаю как распарсить вот такой вот, где

<value ddd=инфа dsd=инфа
>
</value>
Вот такую инфу я не могу вытащить...
пробовал с помощью sed:
grep -e "IIsWebServer " data1.xml |sed -e "s/^[ ]*//" |sed -e "s/^<IIsWebServer </IIsWebServer>//g" |sed -e "s|/>$||" |while read ln; do eval $ln && echo "$ServerBindings $ServerComment"; done | sort -t "|" -k1
Но ничего не выполняется, ни ероро ни вывода...
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Распарсить XML-файл

Сообщение SLEDopit »

Возможно, стоит посмотреть на утилиты типа xml2. Оно приведёт ваш xml в более подходящий для парсинга формат:

Код: Выделить всё

 $ xml2 < 1.xml
/xml/IIsWebDirectory/@Location=/LM/W3SVC/1/Root/Setup/bin
/xml/IIsWebServer/@Location=/LM/W3SVC/100
/xml/IIsWebServer/@ServerBindings=63.246.13.245:80:trimurti.ca 63.246.13.245:80:www.trimurti.ca
/xml/IIsWebServer/@ServerComment=trimurti.ca
/xml/IIsWebVirtualDir/@Location=/LM/W3SVC/100/Root
/xml/IIsWebVirtualDir/@AccessFlags=AccessRead | AccessScript
/xml/IIsWebVirtualDir/@AppFriendlyName
/xml/IIsWebVirtualDir/@AppIsolated=2
/xml/IIsWebVirtualDir/@AppPoolId=.NET 1.1 AppPool
/xml/IIsWebVirtualDir/@AppRoot=/LM/W3SVC/100/Root
/xml/IIsWebVirtualDir/@AuthFlags=AuthAnonymous | AuthNTLM
/xml/IIsWebVirtualDir/@DefaultDoc=main.html,Default.htm,Default.asp,Default.aspx
/xml/IIsWebVirtualDir/@DirBrowseFlags=DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc
/xml/IIsWebVirtualDir/@HttpCustomHeaders=IISExport: This web site was exported using IIS Export v4.2 X-Powered-By: ASP.NET
/xml/IIsWebVirtualDir/@Path=G:\wwwroot\trimurti.ca
/xml/IIsWebVirtualDir/@UNCPassword=4963446250000000060000004000000047130fbca69e30001123ca9169cddd51ae9
4eb333f9 0feb0d49ffc396e1ddbb36d29e71d40adae6721c6c7a9ad18558c37c386a332789d0adad9a1828fe
4 7fa5f2be1403f949e05d
/xml/IIsWebDirectory/@Location=/LM/W3SVC/100/Root/aspnet_client
/xml/IIsWebDirectory/@AccessFlags=AccessRead
/xml/IIsWebDirectory/@DirBrowseFlags=0
/xml/IIsWebServer/@Location=/LM/W3SVC/101
/xml/IIsWebServer/@ServerBindings=63.246.13.245:80:www.halleluiarestaurant.com 63.246.13.245:80:halleluiarestaurant.com
/xml/IIsWebServer/@ServerComment=halleluiarestaurant.com
/xml/IIsWebVirtualDir/@Location=/LM/W3SVC/101/Root
/xml/IIsWebVirtualDir/@AccessFlags=AccessRead | AccessScript
/xml/IIsWebVirtualDir/@AppFriendlyName
/xml/IIsWebVirtualDir/@AppIsolated=2
/xml/IIsWebVirtualDir/@AppPoolId=.NET 1.1 AppPool
/xml/IIsWebVirtualDir/@AppRoot=/LM/W3SVC/101/Root
/xml/IIsWebVirtualDir/@AuthFlags=AuthAnonymous | AuthNTLM
/xml/IIsWebVirtualDir/@DefaultDoc=main.html,Default.htm,Default.asp,Default.aspx
/xml/IIsWebVirtualDir/@DirBrowseFlags=DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc
/xml/IIsWebVirtualDir/@HttpCustomHeaders=IISExport: This web site was exported using IIS Export v4.2 X-Powered-By: ASP.NET
/xml/IIsWebVirtualDir/@Path=G:\wwwroot\halleluiarestaurant_com
/xml/IIsWebVirtualDir/@UNCPassword=4963446250000000060000004000000047130fbca69e30001123ca9169cddd51ae9
4eb333f9 0feb0d49ffc396e1ddbb36d29e71d40adae6721c6c7a9ad18558c37c386a332789d0adad9a1828fe
4 7fa5f2be1403f949e05d
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21351
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Распарсить XML-файл

Сообщение Bizdelnick »

god_of_vi писал(а):
30.07.2013 12:49
мне нужно это сделать в консоли с помощью xmllint или xsltproc

god_of_vi писал(а):
30.07.2013 18:26
пробовал с помощью sed:

Вы уж определитесь :-)
sed тут - точно не самый простой вариант.

god_of_vi писал(а):
30.07.2013 18:26
sed -e "s/^<IIsWebServer </IIsWebServer>//g"

Не совсем понял, что именно Вы тут хотели сделать, но в этом месте определённо ошибка.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Распарсить XML-файл

Сообщение drBatty »

god_of_vi
повыдёргивать я могу и на sed. Но просто так мне лень. А вот за пиво...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

Bizdelnick писал(а):
30.07.2013 18:47
god_of_vi писал(а):
30.07.2013 12:49
мне нужно это сделать в консоли с помощью xmllint или xsltproc

god_of_vi писал(а):
30.07.2013 18:26
пробовал с помощью sed:

Вы уж определитесь :-)
sed тут - точно не самый простой вариант.

god_of_vi писал(а):
30.07.2013 18:26
sed -e "s/^<IIsWebServer </IIsWebServer>//g"

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


Вы правы

grep -e "IIsWebServer " data1.xml |sed -e "s/^[ ]*//" |sed -e "s/^<IIsWebServer //g" |sed -e "s|/>$||" |while read ln; do eval $ln && echo "$ServerBindings $ServerComment"; done | sort -t "|" -k1
Опечатался я там
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21351
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Распарсить XML-файл

Сообщение Bizdelnick »

Следующая ошибка:
god_of_vi писал(а):
30.07.2013 20:07
sed -e "s|/>$||"

У Вас там в Вашем примере слеша нет, закрывающий тег отдельный. Можно в этом месте сделать так: sed 's|/?\s*>.*||'.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

SLEDopit писал(а):
30.07.2013 18:36
Возможно, стоит посмотреть на утилиты типа xml2. Оно приведёт ваш xml в более подходящий для парсинга формат:

Код: Выделить всё

 $ xml2 < 1.xml
/xml/IIsWebDirectory/@Location=/LM/W3SVC/1/Root/Setup/bin
/xml/IIsWebServer/@Location=/LM/W3SVC/100
/xml/IIsWebServer/@ServerBindings=63.246.13.245:80:trimurti.ca 63.246.13.245:80:www.trimurti.ca
/xml/IIsWebServer/@ServerComment=trimurti.ca
/xml/IIsWebVirtualDir/@Location=/LM/W3SVC/100/Root
/xml/IIsWebVirtualDir/@AccessFlags=AccessRead | AccessScript
/xml/IIsWebVirtualDir/@AppFriendlyName
/xml/IIsWebVirtualDir/@AppIsolated=2
/xml/IIsWebVirtualDir/@AppPoolId=.NET 1.1 AppPool
/xml/IIsWebVirtualDir/@AppRoot=/LM/W3SVC/100/Root
/xml/IIsWebVirtualDir/@AuthFlags=AuthAnonymous | AuthNTLM
/xml/IIsWebVirtualDir/@DefaultDoc=main.html,Default.htm,Default.asp,Default.aspx
/xml/IIsWebVirtualDir/@DirBrowseFlags=DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc
/xml/IIsWebVirtualDir/@HttpCustomHeaders=IISExport: This web site was exported using IIS Export v4.2 X-Powered-By: ASP.NET
/xml/IIsWebVirtualDir/@Path=G:\wwwroot\trimurti.ca
/xml/IIsWebVirtualDir/@UNCPassword=4963446250000000060000004000000047130fbca69e30001123ca9169cddd51ae9
4eb333f9 0feb0d49ffc396e1ddbb36d29e71d40adae6721c6c7a9ad18558c37c386a332789d0adad9a1828fe
4 7fa5f2be1403f949e05d
/xml/IIsWebDirectory/@Location=/LM/W3SVC/100/Root/aspnet_client
/xml/IIsWebDirectory/@AccessFlags=AccessRead
/xml/IIsWebDirectory/@DirBrowseFlags=0
/xml/IIsWebServer/@Location=/LM/W3SVC/101
/xml/IIsWebServer/@ServerBindings=63.246.13.245:80:www.halleluiarestaurant.com 63.246.13.245:80:halleluiarestaurant.com
/xml/IIsWebServer/@ServerComment=halleluiarestaurant.com
/xml/IIsWebVirtualDir/@Location=/LM/W3SVC/101/Root
/xml/IIsWebVirtualDir/@AccessFlags=AccessRead | AccessScript
/xml/IIsWebVirtualDir/@AppFriendlyName
/xml/IIsWebVirtualDir/@AppIsolated=2
/xml/IIsWebVirtualDir/@AppPoolId=.NET 1.1 AppPool
/xml/IIsWebVirtualDir/@AppRoot=/LM/W3SVC/101/Root
/xml/IIsWebVirtualDir/@AuthFlags=AuthAnonymous | AuthNTLM
/xml/IIsWebVirtualDir/@DefaultDoc=main.html,Default.htm,Default.asp,Default.aspx
/xml/IIsWebVirtualDir/@DirBrowseFlags=DirBrowseShowDate | DirBrowseShowTime | DirBrowseShowSize | DirBrowseShowExtension | DirBrowseShowLongDate | EnableDefaultDoc
/xml/IIsWebVirtualDir/@HttpCustomHeaders=IISExport: This web site was exported using IIS Export v4.2 X-Powered-By: ASP.NET
/xml/IIsWebVirtualDir/@Path=G:\wwwroot\halleluiarestaurant_com
/xml/IIsWebVirtualDir/@UNCPassword=4963446250000000060000004000000047130fbca69e30001123ca9169cddd51ae9
4eb333f9 0feb0d49ffc396e1ddbb36d29e71d40adae6721c6c7a9ad18558c37c386a332789d0adad9a1828fe
4 7fa5f2be1403f949e05d


Работаю на centos. Я скачал все либы под xml2, но команды xml2 нету у меня... с помощью какой команды можно отфарматировать код в удобный вид? Заранее спасибо
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

Bizdelnick писал(а):
30.07.2013 22:29
Следующая ошибка:
god_of_vi писал(а):
30.07.2013 20:07
sed -e "s|/>$||"

У Вас там в Вашем примере слеша нет, закрывающий тег отдельный. Можно в этом месте сделать так: sed 's|/?\s*>.*||'.

Ничего не происходит все равно... ни ошибок.. ни ответа
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Распарсить XML-файл

Сообщение drBatty »

god_of_vi писал(а):
30.07.2013 20:07
grep -e "IIsWebServer " data1.xml |sed -e "s/^[ ]*//" |sed -e "s/^<IIsWebServer //g" |sed -e "s|/>$||" |while read ln; do eval $ln && echo "$ServerBindings $ServerComment"; done | sort -t "|" -k1

вы про тег CODE слышали?

god_of_vi писал(а):
31.07.2013 13:42
Ничего не происходит все равно... ни ошибок.. ни ответа

потому-что не нужно валить в одну кучу Over9000 непонятных команд. Делайте поэтапно. И намного быстрее добавлять команды не в конвейер, а в sed-скрипт. По одной.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

drBatty писал(а):
31.07.2013 19:26
god_of_vi писал(а):
30.07.2013 20:07
grep -e "IIsWebServer " data1.xml |sed -e "s/^[ ]*//" |sed -e "s/^<IIsWebServer //g" |sed -e "s|/>$||" |while read ln; do eval $ln && echo "$ServerBindings $ServerComment"; done | sort -t "|" -k1

вы про тег CODE слышали?

god_of_vi писал(а):
31.07.2013 13:42
Ничего не происходит все равно... ни ошибок.. ни ответа

потому-что не нужно валить в одну кучу Over9000 непонятных команд. Делайте поэтапно. И намного быстрее добавлять команды не в конвейер, а в sed-скрипт. По одной.


Дорогой друг, я новичек в линуксе... Я про линукс парсинг узнал только вчера... нужно сделать вот такую задачку... 2 дня сижу уже... не могу вытянуть с этого XML то, что нужно... там файл, во-первых, большой, во-вторых, я нуб в этом всем. Вот по-этому и нужна помощь
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: Распарсить XML-файл

Сообщение SLEDopit »

god_of_vi писал(а):
31.07.2013 13:08
Работаю на centos. Я скачал все либы под xml2, но команды xml2 нету у меня... с помощью какой команды можно отфарматировать код в удобный вид? Заранее спасибо
Хм, ну в центовских репозиториях его может и не быть. Я центось в последний раз в руках крутил года 2 назад.
А какой-нить pbone.net выдаёт только пакеты для федоры:

Код: Выделить всё

Fedora 19     download.fedora.redhat.com/pub/fedora/linux/development/19/x86_64/os/Packages/x/xml2-0.5-4.fc19.x86_64.rpm
Fedora 19     download.fedora.redhat.com/pub/fedora/linux/development/19/i386/os/Packages/x/xml2-0.5-4.fc19.i686.rpm

А вообще вот страничка автора.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
Аватара пользователя
alkesta
Сообщения: 345
ОС: Fedora

Re: Распарсить XML-файл

Сообщение alkesta »

$

$ cat parse.sh #!/bin/bash read_file () { local IFS=\> read -d \< ENTITY CONTENT local RET=$? TAG_NAME=${ENTITY%% *} ATTRIBUTES=${ENTITY#* } return $RET } parse () { if [[ $TAG_NAME = "IIsWebServer" ]] ; then eval local $ATTRIBUTES echo "ServerBindings is: $ServerBindings" echo "ServerComment is: $ServerComment" elif [[ $TAG_NAME = "IIsWebVirtualDir" ]] ; then eval local $ATTRIBUTES echo "Path is: $Path" fi } while read_file; do parse done


$

$ cat file.xml | ./parse.sh ServerBindings is: 63.246.13.245:80:trimurti.ca 63.246.13.245:80:www.trimurti.ca ServerComment is: trimurti.ca/ Path is: G:wwwroottrimurti.ca

Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Распарсить XML-файл

Сообщение drBatty »

god_of_vi писал(а):
31.07.2013 19:53
Дорогой друг, я новичек в линуксе... Я про линукс парсинг узнал только вчера... нужно сделать вот такую задачку... 2 дня сижу уже... не могу вытянуть с этого XML то, что нужно... там файл, во-первых, большой, во-вторых, я нуб в этом всем. Вот по-этому и нужна помощь

у меня в подписи ссылка на учебник. Читайте на здоровье.

Вообще говоря XML правильно парсить не так, но думаю в вашем случае sed достаточно.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
god_of_vi
Сообщения: 28
ОС: Archlinux

Re: Распарсить XML-файл

Сообщение god_of_vi »

alkesta писал(а):
31.07.2013 22:14

$

$ cat parse.sh #!/bin/bash read_file () { local IFS=\> read -d \< ENTITY CONTENT local RET=$? TAG_NAME=${ENTITY%% *} ATTRIBUTES=${ENTITY#* } return $RET } parse () { if [[ $TAG_NAME = "IIsWebServer" ]] ; then eval local $ATTRIBUTES echo "ServerBindings is: $ServerBindings" echo "ServerComment is: $ServerComment" elif [[ $TAG_NAME = "IIsWebVirtualDir" ]] ; then eval local $ATTRIBUTES echo "Path is: $Path" fi } while read_file; do parse done


$

$ cat file.xml | ./parse.sh ServerBindings is: 63.246.13.245:80:trimurti.ca 63.246.13.245:80:www.trimurti.ca ServerComment is: trimurti.ca/ Path is: G:wwwroottrimurti.ca



Большое спасибо, ты мне очень помог) с меня пиво
Спасибо сказали: