본문으로 건너뛰기
  1. Posts/

Polarion - Text 타입 필드 DocumentBuilder를 활용한 Parsing 방법

·2 분· loading · loading ·
Jeong
Solution Techtopic Polarion Javascript DocumentBuilder Parsing
RedBeanSoft
작성자
RedBeanSoft
Siemens 의 PLM/ALM/CAD 분야 전문 파트너입니다.
작성자
jeong
There is no end to learning, but there are many beginnings.

이 글은 Polarion, Javascript 개발자를 대상으로 하며, Text 또는 Rich Text 타입 필드에 입력된 데이터를 HTML 태그명으로 요소를 찾는 방법에 대해 설명합니다.

HTML 요소는 DocumentBuilder로 데이터를 파싱하여 DOM(Document Object Model) 객체를 사용합니다.

워크아이템 Text 타입 내용 가져오기
#

WorkItem의 기본 속성 중 하나인 Description 필드는 Rich Text 타입입니다.

Description 필드에 저장된 데이터는 Polarion OpenAPI를 사용하여 아래와 같이 가져올 수 있습니다.

workItem.getDescription();

Text, Rich Text 데이터를 가져오면 “text/plain:\n” 또는 “text/html:\n” 이 데이터 앞쪽에 붙어 출력됩니다.

이때 이 문자열 없이 데이터만을 가져오는 방법은 아래와 같습니다.

workItem.getDescription().convertToHTML().getContent();

Text 타입에 대한 자세한 정보는 Class Text를 참고해 주세요.

테이블 요소 가져오기
#

이제 필드 내에 <table> 요소가 있는 경우를 예로 들어보겠습니다.

컬럼의 헤더와 헤더에 해당하는 데이터 셀 값을 가져오기 위해 필드 데이터를 파싱해야 합니다.

Java의 DocumentBuilder를 이용하여 파싱할 수 있습니다.

// 필요한 패키지를 import 합니다.
var DocumentBuilderFactory = Packages.javax.xml.parsers.DocumentBuilderFactory;
var InputSource = Packages.org.xml.sax.InputSource;
var StringReader = Packages.java.io.StringReader;

// workItem Description 필드의 콘텐츠 값을 content에 저장합니다.
var content = workItem.getDescription().convertToHTML().getContent();

// DocumentBuilder를 이용하여 content 내용을 파싱합니다.
var factory = DocumentBuilderFactory.newInstance();
var builder = factory.newDocumentBuilder();
var is = new InputSource(new StringReader(content));
var textToParse = builder.parse(is);

이제 DOM 객체 textToParse 에서 <tr> 요소를 가져온 후, 각 <tr>가 가진 <td> 요소를 출력합니다.

// "tr" 요소를 trElements에 저장합니다.
var trElements = textToParse.getElementsByTagName("tr");

// trElements의 길이만큼 반복합니다.
for (var i = 0; i < trElements.getLength(); i++) {
    var tr = trElements.item(i);
    console.log(i + " tr:" + tr.getTextContent());
	
    // i번째 tr 요소가 가진 "td" 요소를 tdElements에 저장합니다.
	var tdElements = tr.getElementsByTagName("td");
    // tdElements 길이만큼 반복합니다.
	for (var j = 0; j < tdElements.getLength(); j++) {
        var td = tdElements.item(j);
        console.log(j + " td:" + td.getTextContent());
    }
}

이와 같이 DocumentBuilder를 활용하면 Polarion 워크아이템의 Text 타입 필드에서 HTML 요소를 손쉽게 파싱하여 사용할 수 있습니다.