Распечатать текст между двумя тегами XML

Рассмотрим следующую выдержку из большого файла XML:

  ...
  <serverName someKey="false" anotherKey="0.05" thirdKey="0.04">
    <default>blah.blah.blah</default>
    <region name="US">us.blah.net</region>
    <region name="EU">eu.blah.net</region>
    <region name="IL">il.blah.net</region>
  </serverName>
  ...

Как распечатать строки между открывающим тегом <serverName ...> и закрывающим тегом </serverName>?

4
задан 24 April 2013 в 19:33

3 ответа

sed -n '/<serverName/,/<\/serverName/p' big_xml_file.xml

Сделал трюк (адаптировано из этого поста на linuxquestions.org).

На Ubuntu 14.04:

$ sed -n '/<serverName/,/<\/serverName/p' big.xml
<serverName someKey="false" anotherKey="0.05" thirdKey="0.04">
  <default>blah.blah.blah</default>
  <region name="US">us.blah.net</region>
  <region name="EU">eu.blah.net</region>
  <region name="IL">il.blah.net</region>
</serverName>
0
ответ дан 24 April 2013 в 19:33

sed - отличный инструмент, но XML в конечном итоге заставит любого программиста, который обращается к нему с криком REGEX. Я знаю. Я был там. Если есть хоть малейшая вероятность того, что ваши данные изменятся, вам нужен правильный анализатор XML.

Мой выбор - использовать BeautifulSoup, но это затрудняет работу с ним напрямую из Bash. Если вы хотите написать промежуточный скрипт Python, это все еще вариант ... В противном случае xpath - это довольно классический вариант. Это оболочка библиотеки Perx libxml, которая делает довольно мощные вещи.

sudo apt-get install libxml-xpath-perl

И для вашего примера, вот как я это сделаю в языке запросов xpath :

xpath -e '*/serverName/*' big_xml_file.xml

Опять же, если вам нужно сделать что-нибудь полезное с XML, рассмотрим что-то еще более сильное, например BeautifulSoup и Python.

0
ответ дан 24 April 2013 в 19:33

Я также могу представить, что вам нужно найти конкретный сервер из более длинного списка вместе с конкретными настройками или регионами на основе некоторых заданных условных путей.

В этом случае я бы порекомендовал обернуть ваши операторы и условия XPATH в таблицу стилей XSLT. В репозиториях доступно несколько синтаксических анализаторов XSLT для работы с командной строкой, PHP, Perl, Python, Java и т. Д.

XSLT очень мощный и может выводить текст, XML и HTML.

0
ответ дан 24 April 2013 в 19:33

Другие вопросы по тегам:

Похожие вопросы: