2013-11-27 3 views
0

Новичок в оболочке скриптов здесь. Как читать, например, каждое имя из следующего кода xml и помещать все имена в столбцы?Читайте от xml до bash

<rates> 
    <currency> 
     <name>Australian dollar</name> 
     <rate>2.34</rate> 
     <amount>1</amount> 
    </currency> 
    <currency> 
     <name>GB Pounds</name> 
     <rate>4.12</rate> 
     <amount>1</amount> 
    </currency> 
    <currency> 
     <name>Euro</name> 
     <rate>3.45</rate> 
     <amount>1</amount> 
    </currency> 
    <currency> 
     <name>USA dollar</name> 
     <rate>2.55</rate> 
     <amount>1</amount> 
    </currency> 
    <currency> 
     <name>Russian ruble</name> 
     <rate>7.72</rate> 
    <amount>100</amount> 
    </currency> 
+3

[Как разобрать XML в Bash?] (Http://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash?rq=1) – ToastyMallows

ответ

0

можно использовать sed, если вы просто хотите извлечь определенное значение тега из XML-файла.

sed -n 's/.*<name>\(.*\)<\/name>/\1/p' test.txt 

#extract and print comma separated list 
sed -n 's/.*<name>\(.*\)<\/name>/\1/p' t1.txt | tr '\n' ',' 
1

Как кто-то отметил, что «СЭД» является прекрасным способом для извлечения данного элемента из файла XML - так долго, как ваш фактический XML так просто, как пример OP дал. Но остерегайтесь таких случаях, как:

  • элементов, которые не являются полными и только на одной линии
  • элементы, которые могут быть вложенными, как HTML списки или дивы или пролетах ....
  • данных, который выглядит как теги но это не так, потому что это экранировано, например, внутри разделенных CDATA разделов, инструкций обработки или комментариев.

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

Если вы хотите получить несколько элементов, покройте более общие случаи и т. Д., Это займет немного больше работы. Одним из многих способов является преобразование в нечто тривиальное, как CSV (у меня есть скрипты Perl, называемые «xml2tab» и «tab2xml», которые я использую для этого все время).

Смежные вопросы