PHP로 XML 파싱하기

이 포스트에서는 PHP로 XML 문서의 데이터를 읽어들이는 방법을 설명합니다.

설명하기에 앞서 우선 XML 문서를 하나 준비합니다.

<?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>
    <album order="EP 4집">THE AWAKENING</album>
  </albums>
</girlgroup>

언제나처럼 이번에도 예시는 여자친구
이 XML 문서의 이름이 gfriend.xml라고 가정하고 코드를 작성해 봅시다.

<?php
/* PHP XML parser sample */
	$xml=simplexml_load_file("./gfriend.xml") or die("Error: Cannot create object");
?>

<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8">
		<title>PHP XML parser sample</title>
	</head>
 
	<body>
		<h2 id="gname"><?php
			echo $xml->name;
			if ($xml->name["alias"]) printf(" (%s)", $xml->name["alias"]);
		?></h2>
		<p>멤버 구성: <span id="members"><?php
			$i = 0;
			foreach ($xml->members->member as $value) {
				echo ( $i > 0 ? ", " : "" ) . $value;
				$i++;
			}
		?></span></p>
		<h3>앨범 목록</h3>
		<ul id="albums"><?php
			foreach ($xml->albums->album as $value) {
				if ($value["order"]) {
					printf("<li>%s: %s</li>\n", $value["order"], $value);
				} else {
					printf("<li>%s</li>\n", $value);
				}
			}
		?></ul>
	</body>
</html>

이렇게 HTML 문서에 삽입된 PHP로 작성되었습니다. 생각보다 코드가 그리 복잡하지는 않습니다.

3번 줄에서 gfriend.xml 문서를 불러와서 $xml 객체 변수에 대입합니다. 파일이 없거나 해서 읽는 데 실패하면 ‘Error: Cannot create object’라는 메시지와 함께 그 뒤로 아무 내용도 표시되지 않고 바로 끝이 나 버립니다. 만약 읽는 데 성공했다면,

미리 불러온 XML 문서의 내용을 15번 줄에서부터 표시합니다. 우선 name 요소의 값을 찾아서 출력한 후, 만약에 속성값으로 alias가 있다면 함께 표시합니다. 이 예시대로라면, 제목 부분은 ‘여자친구 (GFREIND)’라고 표시될 것입니다.

19번 줄에서 차례를 기록하기 위한 임시 변수를 선언하고 20번 줄부터 23번 줄까지 members 요소 안의 member 요소 개수만큼 값을 추출하면서 반복합니다. 만약 첫 차례가 아니라면 쉼표(,)를 먼저 붙이고 그 다음 member 요소에 나열된 멤버 이름을 차례로 열거합니다.

27번 줄에서 33번 줄까지는 앨범 목록을 추출하여 출력하기 위한 반복문입니다. 멤버 목록 추출과 같은 방법으로 albums 요소 안의 album 요소 개수만큼 반복합니다. 여기서는 album 요소 안의 속성값으로 order가 있다면 order 값을 병기하고(예: ‘EP 1집: Season of Glass’) 그렇지 않다면 데이터값만 출력하는 방식입니다.

이렇게 코딩한 후 문서를 불러왔을 때,

여자친구 (GFRIEND)

멤버 구성: 소원, 예린, 은하, 유주, 신비, 엄지

앨범 목록
  • EP 1집: Season of Glass
  • EP 2집: Flower Bud
  • EP 3집: SNOWFLAKE
  • 정규 1집: LOL
  • EP 4집: THE AWAKENING

파싱된 XML 데이터가 이같이 출력된다면 성공입니다.

이로써 PHP로 XML 문서를 파싱해서 처리하는 프로그램을 만들어 볼 수 있습니다.

“PHP로 XML 파싱하기”의 2개의 생각

  1. Wow that was unusual. I just wrote an very long
    comment but after I clicked submit my comment didn’t show
    up. Grrrr… well I’m not writing all that over again.
    Anyway, just wanted to say great blog!

답글 남기기

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