0

我有一个 xml 文件,它具有以下结构,其中包含许多<Episodes></Episodes>结构如下所示:

<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 的组合来完成,但似乎无法弄清楚我如何做到这一点的任何帮助将不胜感激。

4

1 回答 1

1

不使用正确的 XML 解析器sedawk. 您仍然可以从 bash 脚本调用 XML 解析器,就像使用sedor一样awk。使用 XML 是一个坏主意,sed或者awk因为 XML 是结构化文件,sed并且是awk面向行的文件的典型工作。使用错误的工作工具只会让自己头疼。我建议使用具有用于解析 XML 的库的专用工具或语言phppythonperl(或任何其他不以 开头的语言)。p

于 2013-05-07T10:38:11.327 回答