0

<Episodes></Episodes>私は、構造が次のように見える多数を含む次の構造を持つ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 の組み合わせを使用して何らかの方法で実行できることは知っていますが、これを行う方法についての助けをいただければ幸いです。

4

1 に答える 1

1

sedorではなく、適切な XML パーサーを使用してくださいawksedまたはと同じように、bash スクリプトから XML パーサーを呼び出すことができますawk。XML は構造化されたファイルであり、行指向のファイルを扱う典型的な作業であるため、 sedorを使用するのはお勧めできません。仕事に間違ったツールを使用すると、頭が痛くなるだけです。XML を解析するためのライブラリを備えた専用ツールまたは、または(または で始まらないその他の言語) などの言語を使用することをお勧めします。awksedawkphppythonperlp

于 2013-05-07T10:38:11.327 に答える