2011-07-04 2 views
3

많은 XML 데이터와 함께 작동하는 응용 프로그램이 있습니다. 그래서, 자바에서 XML을 처리 할 수있는 최고의 API가 무엇인지 물어보고 싶습니다. 오늘 저는 W3을 사용하고 있으며, 성능을 위해 일부 API로 마이그레이션하려고합니다. 저는 XML을 0에서 변환하고, 많은 변형을하고, 데이터베이스 (mysql, mssql 등)로 가져오고, 데이터베이스에서 HTML, modifi 등으로 내보내기합니다.최상의 성능을위한 XML API

JDOM이 최선의 선택입니까? JDOM보다 더 좋은 점을 알고 있습니까? 약 의 javoot에 대해 (읽기 페이지를 통해) 들었습니다. 누군가 그것을 사용합니까?

나를 추천하는 API는 무엇입니까?

+2

각 API에는 약점과 장점이 있습니다. 장점은 일반적으로 다른 API의 약점을 수정하여 발생합니다. 당신이 필요로하는 강점은 무엇입니까? –

답변

2

방대한 양의 데이터가있는 경우 방대한 양의 메모리를 사용하고 입출력과 처리가 겹치는 것을 방지하기 때문에 모든 것을 한꺼번에 메모리에로드하지 않아야합니다. 안타깝게도 DOM과 DOM 같은 라이브러리 (DOM4J와 같은)는 대부분 그렇게 믿기 때문에 엄청난 양의 XML을 효율적으로 처리하는 데는 적합하지 않습니다.

대신 SAX 또는 StAX와 같은 스트리밍 API를 사용하십시오. StAX는 제 경험으로 볼 때 일반적으로 사용하기가 쉽습니다.

SAX 성능으로 DOM의 편리함을 제공하는 다른 API가 있습니다. Javolution은 하나 일 수 있습니다. VTD-XML은 또 하나입니다. 하지만 StAX는 기본적으로 멋진 스트림이므로 StAX는 스트림에서 텍스트 파일을 읽는 것과 같은 방식으로 생각하면됩니다.

JAXB와 StAX를 결합하는 것이 좋습니다. 아이디어는 StAX를 사용하여 파일을 스트리밍 한 다음 JAXB를 사용하여 파일 내의 청크를 비 정렬 화하는 것입니다. 예를 들어 Atom 피드를 처리하는 경우 해당 피드를 열고 머리글을 읽은 다음 entry 요소를 한 번에 하나씩 비 정렬 화하는 루프에서 작업 할 수 있습니다. 이는 형식이 Atom과 같은 독립적 인 요소의 시퀀스로 구성되는 경우에만 실제로 작동합니다. XHTML처럼 더 부자가되면 쓸모가 없을 것입니다. JAXB reference implementationa guy's blog post에서 예를 볼 수 있습니다.

0

글쎄, 내가 아는 대부분의 개발자와 우리는 dom4J을 사용하고 있습니다. 두 프레임 워크를 모두 사용하여 작은 performancetest를 작성할 수있는 시간이 있다면 어쩌면 차이점을 알 수 있습니다. 나는 dom4j를 선호한다.

1

답변은 응용 프로그램에서 어떤 성능 측면이 중요한지에 따라 다릅니다. 하나의 요소는 큰 XML 문서를 처리하는지 여부입니다.

구문 분석의 경우 DOM 기반 방식은 큰 문서로 확장되지 않습니다. 큰 문서를 구문 분석해야하는 경우 SAX 및 StAX를 사용하는 비 DOM 파서는 더 빠르고 자원 집약적입니다. 그러나 구문 분석 후 XSL 또는 DOM API를 사용하여 XML을 변환해야하는 경우 모든 경우에 전체 문서가 메모리에 필요합니다.

StAX는 코드에서 XML을 생성 할 때이를위한 멋진 API를 제공합니다. 접근 방식은 스트림 기반이므로 매우 큰 문서를 작성하는 데 잘 확장됩니다.