XMLReader

XMLReader

아주 큰 XML 문서를 통째로 메모리에 올리기 부담스러울 때는 풀(pull) 방식 파서가 유리해요. XMLReader 확장은 XML 풀 파서예요. 이 리더는 문서 스트림을 따라 앞으로 움직이면서 각 노드에서 멈추는 커서(cursor)처럼 동작해요. 문서 전체를 한 번에 읽지 않고, 필요한 노드만 순서대로 통과하며 처리하죠.

출처: XMLReader

본문

내부적으로 libxml은 UTF-8 인코딩을 사용하므로, 가져온 내용의 인코딩은 항상 UTF-8이라는 점을 기억해 두세요.

기본 사용법은 이렇게 생겼어요. open() 또는 XML()로 파싱할 대상을 지정한 뒤, read()로 문서를 한 노드씩 이동하면서 노드 타입에 따라 처리하면 돼요.

$reader = XMLReader::open('xml_file.xml');
while ($reader->read() !== false) {
    switch ($reader->nodeType) {
        case XMLReader::ELEMENT:
            // 요소 처리
            break;
        case XMLReader::TEXT:
            // 텍스트 처리
            break;
    }
}

XMLReader 클래스

XMLReader 클래스가 제공하는 주요 메서드를 정리할게요.

  • 문서 열기: open(URI로 열기), XML(XML 문자열 지정), fromUri, fromString, fromStream
  • 노드 이동: read(다음 노드로 이동), next(하위 트리를 건너뛰고 다음 노드로), moveToElement, moveToAttribute, moveToFirstAttribute, moveToNextAttribute, moveToAttributeNs, moveToAttributeNo
  • 값 읽기: readString, readInnerXml, readOuterXml, getAttribute, getAttributeNs, getAttributeNo, expand(현재 노드의 DOM 객체 사본)
  • 검증·설정: isValid, setSchema(XSD 검증), setRelaxNGSchema, setRelaxNGSchemaSource, setParserProperty, getParserProperty
  • 네임스페이스: lookupNamespace
  • 종료: close

더 알아보기

설치 요구 사항은 Installing/Configuring 문서를 확인해 보세요. XMLReader 클래스의 각 메서드에 대한 구체적인 설명과 예제는 클래스 레퍼런스 문서에서 이어서 보시면 돼요.