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 클래스의 동작도 함께 보시면 좋아요.