Распарсить XML-файл
Модератор: Модераторы разделов
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
Распарсить XML-файл
Мне нужно распарсить приатаченный файл конфигурации 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>
получением имени доменов и его биндингсов и путь где находится,
например для домена 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-файл
god_of_vi
Можно написать приложение на Python. Там есть удобные парсеры.
Можно написать приложение на Python. Там есть удобные парсеры.
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Распарсить XML-файл
А в чём, собственно, затыка?
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.
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-файл
Прямо так, с незакрытой кавычкой?
В целом - не понимаю, чего Вы хотите от форума? Задача достаточно проста, чтобы не требовалось особых подсказок, но слишком тягомотна, чтобы кто-то сделал её за Вас целиком. Хотя бы начните что-то делать, не получится - покажите свой вариант и, вероятно, Вам помогут его исправить.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
Re: Распарсить XML-файл
Bizdelnick писал(а): ↑30.07.2013 13:31
Прямо так, с незакрытой кавычкой?
В целом - не понимаю, чего Вы хотите от форума? Задача достаточно проста, чтобы не требовалось особых подсказок, но слишком тягомотна, чтобы кто-то сделал её за Вас целиком. Хотя бы начните что-то делать, не получится - покажите свой вариант и, вероятно, Вам помогут его исправить.
Извените, мне просто понять саму суть работы этих утилит, напишите хотя бы часть самую малую, а потом склею я уже сам
Заранее спасибо
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
-
Hephaestus
- Сообщения: 3728
- Статус: Многоуважаемый джинн...
- ОС: Slackware64-14.1/14.2
Re: Распарсить XML-файл
Если совсем коротко, нужно писать xsl-файл, содержащий правила разбора вашего xml.
Затем это скармливается утилите xsltproc вместе с xml-файлом. На выходе получается файл в нужном Вам виде.
В качестве примера, как вообще парсить xml-файлы подойдет doсbook, ознакомьтесь, а дальше копайте на предмет составления собственных xsl-файлов под свои конкретные задачи.
Сложность тут в том, что xml описывает структуру данных. И она - эта структура - может быть очень разной.
И поэтому в каждом случае будут свои правила разбора. Вот эти самые правила Вам и предстоит написать под свой конкретный xml.
Спасибо сказали:
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
Re: Распарсить XML-файл
fflatx писал(а): ↑30.07.2013 17:58Если совсем коротко, нужно писать 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-файл
Возможно, стоит посмотреть на утилиты типа 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 7fa5f2be1403f949e05dUNIX 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.
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-файл
Вы уж определитесь :-)
sed тут - точно не самый простой вариант.
Не совсем понял, что именно Вы тут хотели сделать, но в этом месте определённо ошибка.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Распарсить XML-файл
god_of_vi
повыдёргивать я могу и на sed. Но просто так мне лень. А вот за пиво...
повыдёргивать я могу и на sed. Но просто так мне лень. А вот за пиво...
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
Re: Распарсить XML-файл
Bizdelnick писал(а): ↑30.07.2013 18:47
Вы уж определитесь :-)
sed тут - точно не самый простой вариант.
Не совсем понял, что именно Вы тут хотели сделать, но в этом месте определённо ошибка.
Вы правы
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-файл
Следующая ошибка:
У Вас там в Вашем примере слеша нет, закрывающий тег отдельный. Можно в этом месте сделать так: sed 's|/?\s*>.*||'.
У Вас там в Вашем примере слеша нет, закрывающий тег отдельный. Можно в этом месте сделать так: sed 's|/?\s*>.*||'.
Пишите правильно:
| в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
Спасибо сказали:
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
Re: Распарсить XML-файл
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-файл
Bizdelnick писал(а): ↑30.07.2013 22:29Следующая ошибка:
У Вас там в Вашем примере слеша нет, закрывающий тег отдельный. Можно в этом месте сделать так: sed 's|/?\s*>.*||'.
Ничего не происходит все равно... ни ошибок.. ни ответа
-
drBatty
- Сообщения: 8735
- Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
- ОС: Slackware-current
Re: Распарсить XML-файл
вы про тег CODE слышали?
потому-что не нужно валить в одну кучу Over9000 непонятных команд. Делайте поэтапно. И намного быстрее добавлять команды не в конвейер, а в sed-скрипт. По одной.
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
Re: Распарсить XML-файл
Дорогой друг, я новичек в линуксе... Я про линукс парсинг узнал только вчера... нужно сделать вот такую задачку... 2 дня сижу уже... не могу вытянуть с этого XML то, что нужно... там файл, во-первых, большой, во-вторых, я нуб в этом всем. Вот по-этому и нужна помощь
-
SLEDopit
- Модератор
- Сообщения: 4824
- Статус: фанат консоли (=
- ОС: GNU/Debian, RHEL
Re: Распарсить XML-файл
Хм, ну в центовских репозиториях его может и не быть. Я центось в последний раз в руках крутил года 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.
The more you believe you don't do mistakes, the more bugs are in your code.
-
alkesta
- Сообщения: 345
- ОС: Fedora
Re: Распарсить XML-файл
$
$ 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-файл
god_of_vi писал(а): ↑31.07.2013 19:53Дорогой друг, я новичек в линуксе... Я про линукс парсинг узнал только вчера... нужно сделать вот такую задачку... 2 дня сижу уже... не могу вытянуть с этого XML то, что нужно... там файл, во-первых, большой, во-вторых, я нуб в этом всем. Вот по-этому и нужна помощь
у меня в подписи ссылка на учебник. Читайте на здоровье.
Вообще говоря XML правильно парсить не так, но думаю в вашем случае sed достаточно.
-
god_of_vi
- Сообщения: 28
- ОС: Archlinux
Re: Распарсить XML-файл
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
Большое спасибо, ты мне очень помог) с меня пиво