DOM

DOM (문서 객체 모델)

XML이나 HTML 문서를 프로그램 안의 객체 트리로 다루고 싶다면 DOM을 떠올리시죠. DOM 확장은 PHP에서 DOM API를 통해 XML과 HTML 문서에 대한 연산을 수행할 수 있게 해 줘요. 문서를 읽고, 요소를 찾고, 추가·수정·삭제하는 작업을 표준화된 객체 모델 위에서 처리할 수 있어요.

출처: Document Object Model

본문

참고: 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 문서를 확인해 보세요. 각 클래스의 전체 메서드 목록과 예제는 클래스별 레퍼런스 문서에서 이어서 보시면 돼요.