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 클래스의 각 메서드에 대한 구체적인 설명과 예제는 클래스 레퍼런스 문서에서 이어서 보시면 돼요.