うさぎのしっぽ

プログラミングとか。備忘録として使ってるブログです。あとは趣味少し。 間違いなどありましたらご指摘ください(・3・)

xmlをシンプルにするためのPerl

使いまわししやすそうなので置いておく.

XMLファイルを読み込んで必要な行だけ抽出するperl

見どころはタグの中身だけ拾ってくる部分かな.

ブログに乗せるためにちょこちょこいじったからそのままだと動かないかも

($value)=$line=~/<count>(.*?)<\/count>/; # <count>タグで囲まれた部分を探して${value}に代入

 

 

#
# xmlをシンプルにするためのプログラム
#
#
#
# 使い方
# program.pl sorcefile.xml > outpurfile
#
#

########################################
# 引数の数が正しいかチェック
# 定数宣言
# program.exe sorcefile
########################################

#引数の数をチェックする
#引数の数が正しくない場合は,プログラムの実行方法を提示して終了

 

## 引数を使うとき
if (@ARGV != 1){
 die("err. this program needs 1 argment\n inputfile.xml\n");
}

$inputfilename=$ARGV[0];


## 引数使わないとき
#$inputfilename="inputfile.xml"; # XML形式の inputfile の宣言


##########################
# ファイルオープン----------------------------------
# file connection open
##########################

# 読み込み専用で開く.
# ファイルが存在しない場合はエラー出力を出して終了.

if(! open(SORCE_FILE,$inputfilename)){
die("err. can not open ${inputfilename}\n");
}

 

#############################
# メイン処理 特定のタグの中身だけ出力していく#
# 前提: 一行に同じタグは複数存在しない
#############################

# 一行づつ読んで,不必要ならスルー

# 必要な情報ならタブ区切りにして出力

while(my $line = <SORCE_FILE>){#一行づつ読み込む
# print "read line : ",$line,"\n"; #debug用 読み込んだ行をそのまま出力
chomp($line);#改行切り落とし

if(undef){ # 必ず偽(可読性用)

die("err. Code1\n");
next;
}elsif($line =~/<findNGtag>/){ # タグ探し
next;   # 出力せずにスルー  次の行へ処理を進める
}elsif(($value)=$line=~/<find1>(.*?)<\/find1>/){ # タグの中身をvalueに代入
print $value,"\n";     # タグの中身だけ出力して改行
next; # 次の行へ処理を進める
}elsif($line =~/<find2>(.*?)<\/find2>/){   # タグ探し
# print $line,"\n";     # 行を丸ごと出力して改行
next;
}else{
next; #必要のないその他の情報を飛ばす
}

}

# ファイルクローズ-----------------------------------
close(SORCE_FILE);