2015-01-08 12 views
0

기본 작업을 여기 수행하려고합니다.Smooks 또는 무엇이든을 사용하여 XML 파일을 요소별로 분할합니다.

나는 을 간단하고 깔끔하게 정리했습니다. XML 콘텐츠를 요소별로 분리 할 수있는 Java 솔루션입니다. 전체 내용을 메모리에로드하고 싶지 않습니다. 즉, 요소를 스트리밍하고 싶습니다. 각 요소의 문자열 표현을 손에 넣고 원하는 곳으로 보내고 싶습니다. StAX를 가진

내 분명히 실패 풀 구문 분석 시도 :

while(xsr.hasNext()) { 
    if(xsr.next() == XMLEvent.START_ELEMENT && xsr.getLocalName().equals("Order")) { 
     String element = xsr.getElementText(); 
     // or String element = xsr.getText(); 
    } 
} 

는 또한 성공하지 에게 Smooks을 시도했습니다. 특히 여기에 제공된 예제는 요소의 문자열 XML을 유지하는 깔끔한 방법을 제공하지 않습니다. http://www.smooks.org/mediawiki/index.php?title=V1.4:Smooks_v1.4_User_Guide#Basic_Splitting_and_Routing XML 요소를 파일, DB 또는 JMS 대기열로 보내려는 경우 쉽고 간단합니다. 그러나 String XML을 사용하고 싶을 경우를 대비해서는 아닙니다.

내 자신의 SAX 기반 솔루션을 작성하는 것이 더 적은 노력이라고 생각하기에 너무 낙심하고 있습니다. 누가 나를 잘못 증명할 수 있니?

+2

당신이 당신의 입력과 예상되는 출력의 예를 게재 할 수 있습니까? SAX는 정확히이 목적을 위해 만들어 졌기 때문에. –

+0

나는 SAX가 아니라 Smooks를 사용하기를 원했다. 바퀴의 종류를 재발 명하지 않기 위해서입니다. 여기에는 엄격한 의미의 입력/출력이 없으며 요소 세트가있는 표준 XML 콘텐츠 만 있습니다. "주문"그게 전부 야. – Guido

+0

모든 문자열을 하나로 묶으시겠습니까? –

답변

1

해결하려는 광범위한 문제에 대해 설명하지 않아서 Smooks가 올바른 도구인지 아닌지 알기가 어렵습니다. 데이터 조각은 결국 (Smooks의 값을 더하거나 빼는) + 데이터 스트림의 크기에 도달해야합니다.

어쨌든 Smooks를 사용하려면 DomModelCreator [1]을 사용하여 관심있는 XML 조각을 캡처 한 다음 사용자 지정 "Visitor"impl [2], 또는 그루비 스크립틀릿 [3]. 이것이 거대한 sata 스트림이라면, 여러분은 또한 그 조각들을 즉시 처리 할 필요가있을 것입니다. (직렬화되고 다음 조각 전에). 이것은 또한 동일한 사용자 정의 방문자 impl 또는 groovy 스크립트에서 수행 할 수 있지만 실제로는 사용자 사례에 따라 다릅니다. 어쨌든 단편 방문자는 특정 단편에서 실행될 코드를 넣고 "무엇이든"을 수행하는 곳입니다.

[1] http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide#Mixing_DOM_and_SAX

[2] http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide#Implementing_a_Fragment_Visitor

[3] http://www.smooks.org/mediawiki/index.php?title=V1.5:Smooks_v1.5_User_Guide#Scripting