루비로 XML 파일 생성하기
★프로그래밍/Ruby :: 2016. 8. 18. 15:05루비로 XML 파일을 생성하는 방법을 설명하는 포스트입니다.
자, 루비로 XML 파일을 생성하려면 Builder 라이브러리가 필요합니다.
콘솔 명령창에서 'gem list --local'이라고 쳐서 나오는 목록 중에 'builder'가 없으면 설치해야 합니다.
builder를 설치하려면 'gem install builder'라고 치시면 됩니다.
builder 라이브러리가 설치됐으면, 다음과 같이 코딩해 봅시다.
require 'builder' # Builder 라이브러리 불러오기 def buildxml element = Builder::XmlMarkup.new( :indent => 2 ) # 새 XML 문서 element.instruct! # XML DTD 생성 element.girlgroup { # girlgroup 태그 생성 element.group("name" => "여자친구", "alias" => "GFRIEND", "debut-date" => "20150116") { # girlgroup 태그 안에 속성이 name="여자친구"인 group 태그 생성하고 # 그 안에 name 태그 생성 element.member("name" => "소원", "birthday" => "19951207", "position" => "leader, sub-vocal") element.member("name" => "예린", "birthday" => "19960819", "position" => "sub-vocal, lead-dancer") element.member("name" => "은하", "birthday" => "19970530", "position" => "lead-vocal") element.member("name" => "유주", "birthday" => "19971014", "position" => "main-vocal") element.member("name" => "신비", "birthday" => "19980603", "position" => "main-dancer, sub-vocal") element.member("name" => "엄지", "birthday" => "19980819", "position" => "sub-vocal") # album 태그 생성 element.album("name" => "Season of Glass", "type" => "ep", "release" => "20150115") { # album 태그 안에 song 태그 생성 element.song("Intro (Season of Glass)", "track" => "1") element.song("유리구슬 (Glass Bead)", "track" => "2", "title" => "yes") element.song("Neverland", "track" => "3") element.song("White (하얀마음)", "track" => "4") element.song("유리구슬 (Glass Bead) (Inst.)", "track" => "5") } element.album("name" => "Flower Bud", "type" => "ep", "release" => "20150723") { element.song("Intro (Flower Bud)", "track" => "1") element.song("오늘부터 우리는 (Me gustas tu)", "track" => "2", "title" => "yes") element.song("하늘 아래서", "track" => "3") element.song("ONE", "track" => "4") element.song("기억해 (My Buddy)", "track" => "5") element.song("오늘부터 우리는 (Me gustas tu) (Inst.)", "track" => "6") } element.album("name" => "SNOWFLAKE", "type" => "ep", "release" => "20160125") { element.song("Intro (Snowflake)", "track" => "1") element.song("시간을 달려서 (Rough)", "track" => "2", "title" => "yes") element.song("내 이름을 불러줘 (Say My Name)", "track" => "3") element.song("사랑별 (Luv Star)", "track" => "4") element.song("그런 날엔 (Someday)", "track" => "5") element.song("TRUST", "track" => "6") element.song("시간을 달려서 (Rough) (Inst.)", "track" => "7") } element.album("name" => "LOL", "type" => "studio", "release" => "20160711") { element.song("INTRO", "track" => "1") element.song("물들어요 (Fall in Love)", "track" => "2") element.song("너 그리고 나 (NAVILLERA)", "track" => "3", "title" => "yes") element.song("LOL", "track" => "4") element.song("한 뼘 (Distance)", "track" => "5") element.song("물꽃놀이 (Water Flower)", "track" => "6") element.song("Mermaid", "track" => "7") element.song("나의 일기장 (Sunshine)", "track" => "8") element.song("나침반 (Compas)", "track" => "9") element.song("찰칵 (Click)", "track" => "10") element.song("바람에 날려 (Gone with the wind)", "track" => "11") element.song("너 그리고 나 (NAVILLERA) (Inst.)", "track" => "12") } } } end puts buildxml # 결과물 출력
이 코드는 걸그룹 관련 정보를 담은 XML 문서를 생성하는 코드입니다. 여기서는 여자친구(GFRIEND)를 예로 들어 작성해 보았습니다.
이 코드를 실행하면,
<?xml version="1.0" encoding="UTF-8"?> <girlgroup> <group name="여자친구" alias="GFRIEND" debut-date="20150116"> <member name="소원" birthday="19951207" position="leader, sub-vocal"/> <member name="예린" birthday="19960819" position="sub-vocal, lead-dancer"/> <member name="은하" birthday="19970530" position="lead-vocal"/> <member name="유주" birthday="19971014" position="main-vocal"/> <member name="신비" birthday="19980603" position="main-dancer, sub-vocal"/> <member name="엄지" birthday="19980819" position="sub-vocal"/> <album name="Season of Glass" type="ep" release="20150115"> <song track="1">Intro (Season of Glass)</song> <song track="2" title="yes">유리구슬 (Glass Bead)</song> <song track="3">Neverland</song> <song track="4">White (하얀마음)</song> <song track="5">유리구슬 (Glass Bead) (Inst.)</song> </album> <album name="Flower Bud" type="ep" release="20150723"> <song track="1">Intro (Flower Bud)</song> <song track="2" title="yes">오늘부터 우리는 (Me gustas tu)</song> <song track="3">하늘 아래서</song> <song track="4">ONE</song> <song track="5">기억해 (My Buddy)</song> <song track="6">오늘부터 우리는 (Me gustas tu) (Inst.)</song> </album> <album name="SNOWFLAKE" type="ep" release="20160125"> <song track="1">Intro (Snowflake)</song> <song track="2" title="yes">시간을 달려서 (Rough)</song> <song track="3">내 이름을 불러줘 (Say My Name)</song> <song track="4">사랑별 (Luv Star)</song> <song track="5">그런 날엔 (Someday)</song> <song track="6">TRUST</song> <song track="7">시간을 달려서 (Rough) (Inst.)</song> </album> <album name="LOL" type="studio" release="20160711"> <song track="1">INTRO</song> <song track="2">물들어요 (Fall in Love)</song> <song track="3" title="yes">너 그리고 나 (NAVILLERA)</song> <song track="4">LOL</song> <song track="5">한 뼘 (Distance)</song> <song track="6">물꽃놀이 (Water Flower)</song> <song track="7">Mermaid</song> <song track="8">나의 일기장 (Sunshine)</song> <song track="9">나침반 (Compas)</song> <song track="10">찰칵 (Click)</song> <song track="11">바람에 날려 (Gone with the wind)</song> <song track="12">너 그리고 나 (NAVILLERA) (Inst.)</song> </album> </group> </girlgroup>
이렇게 위와 같은 내용의 XML 문서가 생성되어 콘솔에 출력될 것입니다.
그러면, 이 XML 문서를 파일로 저장할 방법이 있을까요? 네. 있습니다.
저기 맨 처음 코드에서 마지막의 'puts buildxml'이라고 되어 있는 곳을 다음과 같이 바꿔 봅시다.
out_file = File.new("girlgroup.xml", "w") out_file.puts(buildxml) out_file.close
이렇게 바꾼 뒤 실행해 보면 girlgroup.xml 파일이 생성되고, 열어 보면 생성된 저 내용이 그대로 들어 있음을 알 수 있을 것입니다.
이렇듯 루비에서는 builder 라이브러리를 이용하여 XML 문서를 생성할 수 있습니다.
많은 도움 되셨나요?
유용한 정보로 활용하시기 바랍니다.