XML 구문 분석
XML 구문 분석 단계는 소스 테이블의 한 열에 들어 있는 XML을 읽어 행으로 변환합니다. 각 입력 행에서 지정한 요소의 모든 항목을 찾아 일치 항목마다 출력 행을 하나씩 내보내며, 해당 요소의 속성과 하위 태그 값을 열에 투영합니다.
Alteryx의 XML Parse 도구에 해당합니다. 구문 분석은 워크플로 엔진에서 실행되므로(데이터베이스는 SQL에서 XML을 구문 분석할 수 없습니다), 이 단계는 PlaidCloud 고유의 기능이며 SQL 대체 경로가 없습니다.
소스 및 옵션
섹션 제목: “소스 및 옵션”- 소스 테이블 — 구문 분석할 XML이 들어 있는 행의 테이블입니다.
- 출력 테이블 — 구문 분석된 행을 기록할 테이블입니다.
- XML 필드 — XML 텍스트가 들어 있는 열입니다.
- 요소 — 모든 항목이 출력 행이 되는 요소입니다. 비워 두면 최상위 요소를 구문 분석합니다.
- 요소를 XPath 1.0 식으로 읽기 — 요소를 이름이 아니라 XPath 1.0
식으로 처리하므로, 조건자, 속성 테스트, 와일드카드,
count(),name(),contains()같은 함수를 사용할 수 있습니다. 상대 경로는 문서의 루트 요소에서 시작합니다. 식이 선택하는 각 항목이 출력 행이 됩니다. 요소는 평소와 같이 구문 분석됩니다. 속성이나count()결과 같은 다른 항목은 해당 행에서 XML 필드 값을 자체 값으로 대체합니다. 하위 값을 켜면 선택한 속성은 대신 자체 이름의 열을 가집니다. XML은 엔터티와 네트워크 액세스를 끈 상태로 읽으며, 올바른 형식이 아닌 문서는 해당 행을 건너뛰도록 설정하지 않는 한 단계를 실패시킵니다. - 하위 요소 값을 열로 내보내기 — 일치하는 각 요소에 대해 하위 태그마다 해당 하위 요소의 값을 담은 열을 추가합니다.
- Emit each child’s outer XML — 추가로 각 하위 요소의 직렬화된 XML을 담은
<tag>_OuterXML열을 추가합니다(하위 요소가 다시 XML을 중첩하고 있어 이후 단계에서 구문 분석하려는 경우에 유용합니다). - XML을 구문 분석할 수 없는 행 건너뛰기 — 입력 행의 값이 올바른 형식의 XML이 아닌 경우 단계를 실패시키지 않고 해당 행을 삭제합니다.
XML을 JSON으로 변환
섹션 제목: “XML을 JSON으로 변환”출력은 각 문서가 무엇이 될지 선택합니다.
- 열(기본값) — 구문 분석된 값을 아래 설정에 따라 열에 기록합니다.
- JSON 요소 — XML 필드의 각 문서가 JSON 텍스트로 대체되며, 입력 행마다 출력 행이 하나씩 만들어집니다. 속성은
@필드가 되고, 요소 자체의 텍스트는#text가 되며, 반복되는 하위 요소는 배열이 됩니다. 요소, 하위 값, 외부 XML, XPath 옵션은 비활성화되며, XML을 구문 분석할 수 없는 행 건너뛰기는 그대로 적용됩니다.
JSON에 형식이 지정된 값을 넣으려면 Detect Value Types From First N Documents를 문서 수로 설정합니다. 그러면 JSON에는 루트의 하위 요소가 들어 있으며, 각 요소는 처음 그만큼의 문서에서 정수, 소수, 불리언, 날짜, 타임스탬프 또는 텍스트로 형식이 지정되고, Spark의 schema_of_xml이 추론하는 방식으로 해당 문서 전체에 맞게 넓혀집니다. 해당 문서에 없는 필드는 제외되고, 형식으로 읽을 수 없는 값은 null이 됩니다. 0이면 모든 값이 텍스트로 유지됩니다.
XPath 열
섹션 제목: “XPath 열”XPath 쿼리 섹션은 KNIME의 XPath 노드처럼 작동합니다. 쿼리(xpaths)에 행을 추가하면, 요소마다 행을 만드는 대신 각 입력 행이 복사되고 XML 필드의 XML에 대한 XPath 1.0 쿼리마다 열이 하나씩 추가됩니다. 통과 열은 형식을 유지합니다. 각 쿼리에는 열(target), XPath 1.0 식(path), 결과(kind), 여러 결과(multi)가 있습니다.
- 결과 — 값 형식으로,
String,Integer,Double,Number,Boolean,Node또는NodeSet입니다. - 여러 결과 — 쿼리가 여러 항목을 선택할 때 기록하는 방식으로,
SingleCell(첫 번째),CollectionCell(목록 값),MultipleColumns(항목마다 열 하나),UngroupToRows(항목마다 행 하나) 또는JoinedText(항목 구분 기호(separator)로 연결한 항목의 텍스트이며 기본값은 공백입니다. 항목 부분(XPath)(parts)은 각 항목의 텍스트를 이 상대 경로들의 첫 번째 일치 항목에서 가져오고, 부분 구분 기호(part_separator)로 연결합니다)입니다. - 비어 있으면 누락(
empty_missing) — 아무것도 선택하지 않는 쿼리는 누락된 셀을 반환합니다.
이 섹션의 다음 필드는 쿼리와 함께 적용됩니다.
- 네임스페이스(
xpath_namespaces) — 쿼리가 사용하는{prefix: namespace URI}쌍입니다. 루트 네임스페이스 접두사(xpath_root_prefix)는 문서 루트의 기본 네임스페이스를 이 접두사에 바인딩합니다. - 출력에서 XML 필드 제외(
xpath_remove_source) — 출력에서 XML 필드를 제외합니다. - 거짓인 부울 쿼리는 누락된 셀을 반환합니다(
xpath_missing_on_false) — 거짓인Boolean쿼리는 누락된 셀을 반환합니다. 아무것도 선택하지 않는 컬렉션 쿼리는 누락된 셀을 반환합니다(xpath_empty_set_missing) — 아무것도 선택하지 않는CollectionCell쿼리는 누락된 셀을 반환합니다. - XML 필드를 HTML 페이지로 읽기(
xpath_html) — 필드를 HTML 페이지로 읽고html루트 아래의 XML 트리로 복구합니다. - ’각각 행 하나’의 항목 번호 열(
xpath_ungroup_index) —UngroupToRows쿼리에서 각 행의 1부터 시작하는 항목 번호를 이 열에 기록합니다. 결과가 없는 ‘각각 행 하나’(xpath_ungroup_empty)는 쿼리가 아무것도 선택하지 않는 문서에 대해 어떻게 할지 결정합니다. 값이 누락된 행 하나(row, 기본값), 행 없음(drop) 또는 단계 실패(fail)입니다. - 첫 번째 쿼리의 요소가 만드는 테이블만 기록(
xpath_table) — 첫 번째 쿼리의 요소가 만드는 테이블만 요소마다 한 행으로 기록하며(예: HTML 테이블의 각tr), 하위 요소는 텍스트 셀이 됩니다. 첫 번째 행이 헤더 셀이면 열 이름이 되고, 그렇지 않으면 열 이름은Column <n>이 됩니다.
열 탭은 통과 열을 위한 표준 데이터 매퍼입니다. 각 출력 행에 그대로 전달하려는 소스 열이 여기에 해당합니다.
구문 분석이 찾아내는 열(요소의 속성과 하위 태그)은 출력에 자동으로 추가되므로 여기에 나열하지 않습니다. 추출된 이름이 통과 열(또는 앞서 추출된 열)과 충돌하면
Alteryx와 마찬가지로 숫자를 덧붙여 중복을 제거합니다(id → id2 → id3).
XML 구문 분석 단계를 연결하면 Alteryx와 같은 방식으로 작동합니다. 들어오는 모든 열이 그대로 전달되므로, 이후 단계에서 앞선 단계가 생성한 열을 다시 구문 분석하거나 앞선 단계가 추출한 열을 참조할 수 있습니다.