루비로 간단한 XML 파일 만들기

루비로 간단한 XML 파일을 설명하는 포스트입니다. 본래 티스토리에 올렸던 포스트를 코드를 개량하고 분량을 다른 XML 생성 포스트에 맞춰 축소한 후 이 곳에 다시 포스팅합니다.

루비로 XML 파일을 생성하려면 Builder 라이브러리가 필요합니다.
콘솔 명령창에서 ‘gem list –local’이라고 쳐서 나오는 목록 중에 ‘builder’가 없으면 설치해야 합니다. builder를 설치하려면 ‘gem install builder’라고 치시면 됩니다.

builder 라이브러리가 설치됐으면, 다음과 같이 코딩해 봅시다.

require 'builder'  # Import builder lib

# Data
$members = ["소원", "예린", "은하", "유주", "신비", "엄지"]
$albums = {"EP 1집"=>"Season of Glass", "EP 2집"=>"Flower Bud",
           "EP 3집"=>"Snowflake",       "정규 1집"=>"LOL" }

def buildxml
	element = Builder::XmlMarkup.new( :indent => 2 )
	element.instruct!  # Make DTD

	# Elements
	element.girlgroup {
		element.name("여자친구", "alias"=>"GFRIEND")
		element.members() {
			$members.each { |member| element.member(member) }
		}
		element.albums() {
			$albums.each_pair {
				|key, value| element.album(value, "order"=>key)
			}
		}
	}
end

# Output
puts buildxml

이 코드는 다른 XML 생성 코드 포스트에도 예로 든 것처럼 걸그룹 여자친구(GFRIEND)에 관한 간단한 정보를 담은 XML 문서를 생성하는 코드입니다.

루비에서는 XML 객체 변수를 생성 후 그 변수 밑에 태그 이름을 프로퍼티로 지정하는 것으로 요소를 생성할 수 있고, 그 안에서 블록을 넣어 하위 요소를 생성할 수 있습니다. 이 예제처럼 새 XML 객체 변수의 이름이 element라고 가정한다면, element.요소명(데이터값, “속성명”=>속성값) 식으로 하면 그 요소명을 갖는 요소가 생성되고 element.요소A { element.요소B } 이런 식으로 쓰면 요소A의 하위 요소로 요소 B가 생성됩니다. 이 예제에서는 최상위 요소 girlgroup 밑에 하위 요소로 name, members, albums가 생성되고 다시 members 밑에는 member가, albums 밑에는 album이 생성됩니다.

참고로 이 예제에서 멤버 목록과 앨범 목록을 배열로 정의할 때 이름 앞에 달러($) 표시를 붙인 이유는 전역변수화하기 위함입니다. 메소드 바깥에서 정의한 변수를 메소드 안에서 사용하려면 그 변수를 전역변수로 정의해야 하기 때문입니다.

이 코드를 실행하면,

<?xml version="1.0" encoding="UTF-8"?>
<girlgroup>
  <name alias="GFRIEND">여자친구</name>
  <members>
    <member>소원</member>
    <member>예린</member>
    <member>은하</member>
    <member>유주</member>
    <member>신비</member>
    <member>엄지</member>
  </members>
  <albums>
    <album order="EP 1집">Season of Glass</album>
    <album order="EP 2집">Flower Bud</album>
    <album order="EP 3집">Snowflake</album>
    <album order="정규 1집">LOL</album>
  </albums>
</girlgroup>

이렇게 위와 같은 내용의 XML 문서가 생성되어 콘솔에 출력될 것입니다.

그러면, 이 XML 문서를 파일로 저장할 방법이 있을까요? 네. 있습니다.

맨 처음 코드에서 마지막의 ‘puts buildxml’이라고 되어 있는 곳을 다음과 같이 바꿔 봅시다.

out_file = File.new("gfriend.xml", "w")
out_file.puts(buildxml)
out_file.close

이렇게 바꾼 뒤 실행해 보면 gfriend.xml 파일이 생성되고, 열어 보면 생성된 저 내용이 그대로 들어 있음을 알 수 있을 것입니다.

이렇듯 루비에서는 builder 라이브러리를 이용하여 XML 문서를 생성할 수 있습니다.
많은 도움 되셨나요? 유용한 정보로 활용하시기 바랍니다.

답글 남기기

이메일 주소는 공개되지 않습니다.