Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
Tags
- reactive
- statestore
- scala 2.10
- kafkastreams
- aws
- Slick
- coursera
- springboot
- scala
- 카프카
- RabbitMQ
- spring-cloud-stream
- play framework
- spring-kafka
- enablekafkastreams
- avo
- Elasticsearch
- schema registry
- 플레이 프레임워크
- confluent
- kafka streams
- Logstash
- Spring
- spring-batch
- Elk
- kafkastream
- 한빛미디어
- gradle
- kafka interactive query
- Kafka
Archives
- Today
- Total
b
VTD-XML 을 이용한 XML 분리. 본문
http://bistros.tistory.com/entry/JAXP-DOM4J-JDOM2%EC%9D%98-%EC%84%B1%EB%8A%A5-%EB%B9%84%EA%B5%90 이 글이나 http://vtd-xml.sourceforge.net/userGuide/5.html 이 글을 보면, 딱히 VTD-XML을 이용하는 이유를 설명안해도 될것같다.
1개의 거대한 XML Documet를 특정 XPATH로 분리하여 처리할 이슈가 있었다. 처음에는 STAX을 이용하여 Current Node를 계속 포인팅해가면서 StringBuiler에 기록해나가는 방식이었는데.. 아래처럼 쓰기로 결정하였다. (VTD의 라이브러리를 확실히 파악하지 못해서 개선할 여지는 충분할 것이라 생각한다)
대략적인 기능:
ROOT NODE - 예) /documents/document
ID NODE - 예) /documents/document/id
2개의 XPATH정보로부터 <ID, XML Document의 String> 형태로 얻어냄
@Override public HeusoRawDocument getNext() throws VTDException { HeusoRawDocument rawDocument=null; String content=null, docId=null; try { int rootTagPoint= rootAutoPilot.evalXPath(); if(rootTagPoint != -1){ long elementFragment = docVN.getElementFragment(); int startPoint = (int)elementFragment; int pointLength= (int)(elementFragment >> 32); content = docVN.toRawString(startPoint, pointLength); int docIdTagPoint = docIdAutoPilot.evalXPath(); if(docIdTagPoint != -1){ docId = docVN.getXPathStringVal(); } } } catch (VTDException vtde){ logger.error("VTD-XML 파서가 파일에서 1개씩 읽어오는 동안 오류가 발생하였습니다. 대략적인 위치는 인덱스 : {} ", count); throw vtde; } if ( content != null && docId != null ){ String fixedLengthDocId = StringUtils.leftPad(docId, DOCUMENT_ID_LENGTH); rawDocument = new HeusoRawDocument(collId, fixedLengthDocId, content); count++; } return rawDocument;
}
'spring framework' 카테고리의 다른 글
springboot 2.0의 RouterFunction 스캐닝 방법 (0) | 2017.04.25 |
---|---|
springframework 5.0 webflux module (0) | 2017.04.23 |
스프링MVC에서 return type이 String 일경우. (4) | 2013.11.29 |
angularjs , $resource 와 spring @requestBody (0) | 2013.11.11 |
spring interceptor (0) | 2013.11.05 |
Comments