Hatena::ブログ(Diary)

記録(仮) Twitter

2011-12-30

Rでxml形式のファイルを読む(超初心者)

| 03:13 | Rでxml形式のファイルを読む(超初心者)を含むブックマーク

やりたいこと

Rを使って、xml形式のファイル中にある<hogehoge><\hogehoge>みたいなタグだけを全部消して普通のテキストファイルに変換する。
つうか、xmlファイル全然分かりません....

ポイント

Rでxmlファイルを編集するには、パッケージXMLを使う。
参考サイト
http://www.omegahat.org/RSXML/
特に、ここ
http://www.omegahat.org/RSXML/gettingStarted.pdf
そして、私はXMLパッケージの関数の意味がまるで分かっていない。

やったこと

#XMLパッケージをインストール

library(XML)


#例:HOGE.xml(TextEditで作ってみた)

<?xml version="1.0" ?>
<TABLE>
	<GRADES>
		<STUDENT> Fred </STUDENT>
		<TEST1> 66 </TEST1>
		<TEST2> 80 </TEST2>
		<FINAL> 70 </FINAL>
	</GRADES>
	<GRADES>
		<STUDENT> Wilma </STUDENT>
		<TEST1> 97 </TEST1>
		<TEST2> 91 </TEST2>
		<FINAL> 98 </FINAL>
	</GRADES>
</TABLE>

#HOGE.xmlを読む。

doc = xmlRoot(xmlTreeParse("HOGE.xml"))
doc

#すべてのタグを取り除く魔法の言葉。

temp1 = xmlSApply(doc, function(x) xmlSApply(x, xmlValue))
temp1

#txt形式で出力

write.table(temp1,"out.txt",quote=F)


#TextEditで開くとこうなります

GRADES GRADES
STUDENT Fred Wilma
TEST1 66 97
TEST2 80 91
FINAL 70 98


#csv形式で出力したい場合は、以下の様に。

write.table(temp1,"out1.txt",quote=F,sep=",")


#よく分からないxmlファイルの時、タグ取り除いたら表の形になっていないものもある。(私がやってみた別のファイルはこんな感じになった)

"STUDENTFredTEST166TEST280FINAL70STUDENTWilmaTEST197TEST291FINAL98"


#なので、余計な部分をgsubで置換する。複数項目があるときは以下のように|を使う。

temp2 = gsub("TEST1|TEST2|FINAL",",",temp1)

#で、こうなる。

"STUDENTFred,66,80,70STUDENTWilma,97,91,98"

#で、データの行ごとに改行したいので、\rで置換する

temp3 = gsub("STUDENT","\rSTUDENT,",temp2)
temp3

#R上ではこうなるのだけど、

"\rSTUDENT,Fred,66,80,70\rSTUDENT,Wilma,97,91,98"

#テキストに出力して、

write.table(temp3,"out2.txt",row.names=F,col.names=F,quote=F)


#TextEditなどで開いてみると、ちゃんと改行されてます。

STUDENT,Fred,66,80,70
STUDENT,Wilma,97,91,98

トラックバック - http://d.hatena.ne.jp/nomatsu/20111230/1325268825