2013-11-27 35 views
0

這裏是shell腳本的新手。例如,我如何閱讀以下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

[如何在Bash中解析XML?](http://stackoverflow.com/questions/893585/how-to-parse-xml-in-bash?rq=1) – ToastyMallows

回答

0

如果您只是想從xml文件中提取特定的標記值,您可以使用sed。

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

正如有人指出的那樣,「sed的」是一個很好的方法來提取從XML文件中給定的元素 - 只要你的實際XML是作爲例子OP了一樣簡單。類似的案件,但要注意:

  • 元素是不完整的,單獨在一行
  • 元素,可以嵌套,就像HTML列表或div的或跨....
  • 數據,看起來像標籤但不是 - 因爲它被轉義了,例如在CDATA標記的部分,處理指令或註釋中。

有時您可以通過先重新打亂混亂的數據來處理這種情況,比如說,所以您想要匹配的開始標籤始終在一行的開頭。

如果你想獲得多個元素,覆蓋更多的一般情況等,它將需要更多的工作。許多方法之一是轉換爲CSV這樣的小事(我一直使用Perl腳本,名爲'xml2tab'和'tab2xml')。