DOM
DOM (문서 객체 모델)
XML이나 HTML 문서를 프로그램 안의 객체 트리로 다루고 싶다면 DOM을 떠올리시죠. DOM 확장은 PHP에서 DOM API를 통해 XML과 HTML 문서에 대한 연산을 수행할 수 있게 해 줘요. 문서를 읽고, 요소를 찾고, 추가·수정·삭제하는 작업을 표준화된 객체 모델 위에서 처리할 수 있어요.
본문
참고: DOM 확장은 내부적으로 UTF-8 인코딩을 사용해요. 다른 인코딩을 처리해야 한다면 mb_convert_encoding(), UConverter::transcode(), 또는 iconv()를 사용하세요.
DOM 확장은 기본 클래스 세트와 PHP 8.4 이후 추가된 Dom\ 네임스페이스 클래스 세트로 나뉘어요. 여기서는 핵심 클래스 위주로 정리할게요.
기본 클래스
- DOMDocument — 문서 전체를 나타내는 클래스로, 요소·텍스트·주석을 만들거나 파일/문자열에서 XML·HTML을 불러오고 저장하는 메서드를 제공해요.
- 생성:
createElement,createTextNode,createAttribute,createCDATASection,createComment등 - 로드·저장:
load,loadXML,loadHTML,loadHTMLFile,save,saveXML,saveHTML,saveHTMLFile등 - 탐색:
getElementById,getElementsByTagName,getElementsByTagNameNS - 검증:
relaxNGValidate,relaxNGValidateSource,schemaValidate,validate
- 생성:
- DOMNode — 모든 노드의 공통 기반 클래스예요. 자식 추가/제거(
appendChild,removeChild,replaceChild,insertBefore), 복제(cloneNode), 정규화(normalize), 비교(isSameNode,isEqualNode,compareDocumentPosition) 등을 제공해요. - DOMElement — 요소 노드를 나타내는 클래스예요. 속성 읽기/쓰기(
getAttribute,setAttribute,hasAttribute,removeAttribute), 자식 요소 탐색(getElementsByTagName) 등을 제공해요. - DOMAttr — 속성 노드를 나타내는 클래스예요.
- DOMText / DOMComment / DOMCdataSection — 텍스트·주석·CDATA 노드를 나타내는 클래스들이에요.
- DOMDocumentFragment — 문서의 일부를 담는 경량 컨테이너예요.
- DOMXPath — XPath 표현식을 평가해서 노드를 찾는 클래스예요.
query()로 노드 목록을,evaluate()로 타입 있는 결과를 얻을 수 있어요. - DOMNodeList — 노드 목록을 나타내며
item()과count()를 제공해요. - DOMNamedNodeMap — 이름으로 노드를 조회하는 맵이에요.
- DOMImplementation — 문서·문서 타입을 생성할 수 있는 구현체예요.
- DOMException — DOM 처리 중 발생하는 예외 클래스예요.
Dom\ 네임스페이스 클래스 (PHP 8.4+)
PHP 8.4부터는 Dom\ 네임스페이스 아래 새 DOM 구현이 제공돼요. Dom\Document, Dom\Element, Dom\Attr, Dom\XMLDocument, Dom\HTMLDocument, Dom\XPath 등을 포함하며, 일부 클래스는 CSS 선택자(querySelector, querySelectorAll)를 지원하는 등 좀 더 현대적인 API를 가져요.
DOM 함수
dom_import_simplexml— SimpleXMLElement 객체로부터 DOMAttr 또는 DOMElement 객체를 얻어요Dom\import_simplexml— SimpleXMLElement 객체로부터Dom\Attr또는Dom\Element객체를 얻어요
더 알아보기
설치 요구 사항과 미리 정의된 상수는 Installing/Configuring과 Predefined Constants 문서를 확인해 보세요. 각 클래스의 전체 메서드 목록과 예제는 클래스별 레퍼런스 문서에서 이어서 보시면 돼요.