2013-05-07 96 views
0

我有具有以下結構,其中包含了許多<Episodes></Episodes>一個XML文件,其結構是這樣的:使用bash腳本處理XML文件

<Episode> 
    <id>4195462</id> 
    <Combined_episodenumber>8</Combined_episodenumber> 
    <Combined_season>2</Combined_season> 
    <DVD_chapter></DVD_chapter> 
    <DVD_discid></DVD_discid> 
    <DVD_episodenumber></DVD_episodenumber> 
    <DVD_season></DVD_season> 
    <Director>Jay Karas</Director> 
    <EpImgFlag>2</EpImgFlag> 
    <EpisodeName>Karl's Wedding</EpisodeName> 
    <EpisodeNumber>8</EpisodeNumber> 
    <FirstAired>2011-11-08</FirstAired> 
    <GuestStars>Katee Sackhoff|Carla Gallo</GuestStars> 
    <IMDB_ID></IMDB_ID> 
    <Language>en</Language> 
    <Overview>Karl Hevacheck, aka the Human Genius, gets married.</Overview> 
    <ProductionCode>209</ProductionCode> 
    <Rating>7.6</Rating> 
    <RatingCount>20</RatingCount> 
    <SeasonNumber>2</SeasonNumber> 
    <Writer>Kevin Etten</Writer> 
    <absolute_number></absolute_number> 
    <filename>episodes/211751/4195462.jpg</filename> 
    <lastupdated>1362547148</lastupdated> 
    <seasonid>471254</seasonid> 
    <seriesid>211751</seriesid> 
</Episode> 

我已經找到了如何拉之間的信息單標籤像這樣

value=$(grep -m 1 "<Rating>" path_to_file | sed 's/<.*>\(.*\)<\/.*>/\1/') 

但我無法找到一種方法來驗證我正在查看正確的情節,即。在保存特定屬性的值之前檢查這是否是<Combined_season>2</Combined_season> <EpisodeNumber>8</EpisodeNumber>的正確分支。我知道這可以以某種方式完成使用sed和awk的組合,但似乎無法弄清楚如何我可以做到這一點將不勝感激。

+3

使用合適的XML解析器而不是'sed'或'awk'! – 2013-05-07 10:18:04

+0

@sudo_O這個函數是一個更大的bash程序的一部分,所以我希望我可以使用其中的一個...爲什麼這是一個這麼糟糕的主意? – brendosthoughts 2013-05-07 10:19:57

+1

您仍然可以從您的bash腳本中調用您的XML解析器。這是一個壞主意,因爲XML是一個結構化文件,sed和awk是面向行文件的典型工作。你只會使用錯誤的工具讓自己頭痛。 – 2013-05-07 10:24:37

回答

1

使用合適的XML解析器不是sedawk。您仍然可以像使用sedawk那樣從您的bash腳本調用XML解析器。使用sedawk是一個壞主意,因爲XML是一個結構化文件,sedawk典型的面向行的文件。你只會使用錯誤的工具讓自己頭痛。我建議使用專用的工具或語言,如phppythonperl(或任何其他不以p開頭的語言)具有用於解析XML的庫。