parsexml
텍스트 필드의 XML 문자열을 파싱하여 루트 요소의 자식 요소를 필드로 추출합니다.
명령어 속성
| 항목 | 설명 |
|---|---|
| 명령어 유형 | 가공 쿼리 |
| 필요 권한 | 없음 |
| 라이선스 사용량 | 해당 없음 |
| 병렬 실행 | 지원 |
| 분산 실행 | 미지원 |
문법
parsexml [field=STR] [overlay=BOOL]
옵션
field=STR- 파싱 대상 필드 이름 (기본값:
line) overlay=BOOLt로 지정하면 원본 레코드의 필드를 유지하면서 XML에서 추출된 필드를 덧씌워 출력합니다. 미지정 시 XML에서 파싱한 필드만 출력합니다. (기본값:f)
입력 필드
| 필드 | 타입 | 필수 여부 | 설명 |
|---|---|---|---|
line | 문자열 | 조건부 | 파싱 대상 필드 (기본값). field 옵션으로 다른 필드를 지정할 수 있습니다. |
출력 필드
| 필드 | 타입 | 설명 |
|---|---|---|
| (XML 자식 요소 이름) | 문자열 또는 객체 | XML 루트 요소의 각 자식 요소. 어트리뷰트가 있으면 맵 타입으로 추출됩니다. |
오류 코드
파싱 오류
해당 사항 없음
런타임 오류
해당 사항 없음
설명
parsexml 명령어는 지정한 필드의 XML 문자열을 파싱하여 루트 XML 요소의 자식 요소를 필드로 추출합니다.
- 자식 요소가 텍스트만 포함하는 경우 문자열 값으로 추출됩니다.
- 자식 요소에 XML 어트리뷰트가 있는 경우, 어트리뷰트의 이름/값 쌍과 요소의 텍스트 내용을
_text키로 포함하는 맵으로 추출됩니다.
맵으로 추출된 필드에서 개별 필드를 분리하려면 parsemap 명령어를 사용합니다.
대상 필드가 null이거나 XML 파싱에 실패하면 해당 레코드는 변경 없이 그대로 출력됩니다.
사용 예
-
XML 문자열 파싱
json "{'line': '<doc><id>sample</id><name>로그프레소</name></doc>'}" | parsexml루트 요소
doc의 자식 요소id,name을 필드로 추출합니다.id필드에는"sample",name필드에는"로그프레소"문자열이 할당됩니다. -
속성이 포함된 XML 파싱
json "{'line': '<doc><id>sample</id><name locale=\"ko\">로그프레소</name></doc>'}" | parsexml | parsemap field=name overlay=tname요소에locale어트리뷰트가 있으므로,name필드에는locale=ko,_text=로그프레소2개의 키/값을 포함하는 맵이 할당됩니다. parsemap 명령어로 맵을locale,_text개별 필드로 분리합니다. -
원본 필드를 유지하면서 파싱
json "{'src_ip': '192.0.2.1', 'line': '<doc><id>sample</id></doc>'}" | parsexml overlay=t원본 레코드의
src_ip필드를 유지하면서 XML에서 추출한id필드를 덧씌워 출력합니다.
호환성
parsexml 명령어는 소나 4.0 이전 버전부터 제공되었습니다.