SimpleXML

SimpleXML

XML을 통째로 객체로 바꿔서 프로퍼티나 배열처럼 다루고 싶다면 SimpleXML이 가장 편해요. SimpleXML 확장은 XML을 일반 프로퍼티 선택자와 배열 이터레이터로 처리할 수 있는 객체로 변환하는, 아주 간단하고 쓰기 쉬운 도구 모음을 제공해요. DOM처럼 세밀하게 다룰 필요 없는 경우엔 이 방식이 훨씬 빠르고 직관적이에요.

출처: SimpleXML

본문

XML을 객체로 바꾸는 진입점은 세 가지 함수예요.

  • simplexml_load_string — XML 문자열을 해석해서 객체를 만들어요 ($xml = simplexml_load_string($str);)
  • simplexml_load_file — XML 파일을 해석해서 객체를 만들어요
  • simplexml_import_dom — XML 또는 HTML 노드로부터 SimpleXMLElement 객체를 얻어요

SimpleXMLElement 클래스

이 확장의 중심은 SimpleXMLElement 클래스예요. 객체로 변환된 XML 요소를 이 클래스로 다루게 되죠.

  • 값/구조 접근: children(자식 요소), attributes(속성), getName, count, __toString
  • 수정: addChild(자식 요소 추가), addAttribute(속성 추가)
  • 출력·저장: asXML(문자열로 반환), saveXML(asXML의 별칭)
  • 검색: xpath(XPath 쿼리 실행), registerXPathNamespace(다음 XPath 쿼리를 위한 접두사/네임스페이스 컨텍스트 생성)
  • 네임스페이스: getDocNamespaces, getNamespaces
  • 순회: current, key, next, rewind, valid — 이터레이터 인터페이스를 구현해서 foreach로 자식들을 돌 수 있게 해 줘요

SimpleXMLIterator는 이 SimpleXMLElement에 반복 기능을 더한 하위 클래스예요.

기본 사용 예

$xml = simplexml_load_file('books.xml');
echo $xml->book[0]->title;   // 첫 번째 book의 title 노드 값

주의할 점은, 노드 값을 바로 쓰면 SimpleXMLElement 객체가 반환된다는 거예요. 문자열이 필요하면 (string)으로 명시적 형변환을 해야 해요.

$myId = (string) $xml->Id;   // 명시적 문자열 변환

노드에 숫자 같은 값이 들어 있어도 비교나 계산 전에는 형변환이 필요한 경우가 있어요.

더 알아보기

기본 사용법과 XML 오류 처리 방법은 Examples 문서의 Basic SimpleXML usage, Dealing with XML errors 항목을 확인해 보세요. SimpleXMLIterator 클래스의 동작도 함께 보시면 좋아요.