parsexml

텍스트 필드의 XML 문자열을 파싱하여 루트 요소의 자식 요소를 필드로 추출합니다.

명령어 속성

항목설명
명령어 유형가공 쿼리
필요 권한없음
라이선스 사용량해당 없음
병렬 실행지원
분산 실행미지원

문법

parsexml [field=STR] [overlay=BOOL]

옵션

field=STR
파싱 대상 필드 이름 (기본값: line)
overlay=BOOL
t로 지정하면 원본 레코드의 필드를 유지하면서 XML에서 추출된 필드를 덧씌워 출력합니다. 미지정 시 XML에서 파싱한 필드만 출력합니다. (기본값: f)

입력 필드

필드타입필수 여부설명
line문자열조건부파싱 대상 필드 (기본값). field 옵션으로 다른 필드를 지정할 수 있습니다.

출력 필드

필드타입설명
(XML 자식 요소 이름)문자열 또는 객체XML 루트 요소의 각 자식 요소. 어트리뷰트가 있으면 맵 타입으로 추출됩니다.

오류 코드

파싱 오류

해당 사항 없음

런타임 오류

해당 사항 없음

설명

parsexml 명령어는 지정한 필드의 XML 문자열을 파싱하여 루트 XML 요소의 자식 요소를 필드로 추출합니다.

  • 자식 요소가 텍스트만 포함하는 경우 문자열 값으로 추출됩니다.
  • 자식 요소에 XML 어트리뷰트가 있는 경우, 어트리뷰트의 이름/값 쌍과 요소의 텍스트 내용을 _text 키로 포함하는 맵으로 추출됩니다.

맵으로 추출된 필드에서 개별 필드를 분리하려면 parsemap 명령어를 사용합니다.

대상 필드가 null이거나 XML 파싱에 실패하면 해당 레코드는 변경 없이 그대로 출력됩니다.

사용 예

  1. XML 문자열 파싱

    json "{'line': '<doc><id>sample</id><name>로그프레소</name></doc>'}"
    | parsexml
    

    루트 요소 doc의 자식 요소 id, name을 필드로 추출합니다. id 필드에는 "sample", name 필드에는 "로그프레소" 문자열이 할당됩니다.

  2. 속성이 포함된 XML 파싱

    json "{'line': '<doc><id>sample</id><name locale=\"ko\">로그프레소</name></doc>'}"
    | parsexml
    | parsemap field=name overlay=t
    

    name 요소에 locale 어트리뷰트가 있으므로, name 필드에는 locale=ko, _text=로그프레소 2개의 키/값을 포함하는 맵이 할당됩니다. parsemap 명령어로 맵을 locale, _text 개별 필드로 분리합니다.

  3. 원본 필드를 유지하면서 파싱

    json "{'src_ip': '192.0.2.1', 'line': '<doc><id>sample</id></doc>'}"
    | parsexml overlay=t
    

    원본 레코드의 src_ip 필드를 유지하면서 XML에서 추출한 id 필드를 덧씌워 출력합니다.

호환성

parsexml 명령어는 소나 4.0 이전 버전부터 제공되었습니다.