[java] 자바를위한 최고의 XML 파서

나는 작은 요소 (최대 8MB, UTF-8로 인코딩 됨) XML 파일을 읽고, 다양한 요소와 속성을 살펴보고, 일부를 수정하고 XML을 디스크에 다시 써야합니다 (바람직하게 들여 쓰기가 잘 된 형식으로) .

내 요구에 가장 적합한 XML 파서는 무엇입니까? 선택할 수있는 많은 것이 있습니다. 내가 알고있는 일부는 다음과 같습니다.

그리고 물론 JDK의 하나입니다 (Java 6을 사용하고 있습니다). Xerces에 익숙하지만 어색한 것을 발견했습니다.

추천?



답변

속도와 메모리에 문제가 없다면 dom4j 는 정말 좋은 옵션입니다. 속도가 필요한 경우 Woodstox 와 같은 StAX 파서를 사용하는 것이 올바른 방법이지만 더 많은 코드를 작성하여 작업을 완료해야하며 스트림에서 XML을 처리하는 데 익숙해 져야 합니다.


답변

특정 파서 구현을 고려해서는 안된다고 생각합니다. XML 처리를위한 Java API를 사용하면 적합한 구문 분석기 구현을 표준 방식으로 사용할 수 있습니다. 코드는 훨씬 이식성이 좋으며 특정 파서가 너무 오래되었다는 것을 알게되면 코드 줄을 변경하지 않고 다른 코드로 바꿀 수 있습니다 (올바르게 수행하는 경우).

기본적으로 표준 방식으로 XML을 처리하는 세 가지 방법이 있습니다.

  • SAX 가장 간단한 API입니다. XML이 직렬 방식으로 처리 될 때 요소 / 속성 내부의 데이터를 수신하는 핸들러 클래스를 정의하여 XML을 읽습니다. 일부 속성 / 요소 만 읽고 /하거나 일부 값을 다시 쓰려는 경우 더 빠르고 간단합니다 (귀하의 경우).
  • DOM 이 메소드는 임의로 수정 / 액세스 할 수있는 객체 트리를 생성하므로 복잡한 XML 조작 및 처리에 더 좋습니다.
  • StAX SAX와 DOM 사이의 중간에 있습니다. 처리 할 때 관심있는 파서에서 데이터를 가져 오는 코드 만 작성하면됩니다.

JDOM 또는 Apache API (예 : Apache Xerces XMLSerializer ) 와 같은 독점 API를 잊어 버리면 시간이 지남에 따라 또는 이전 버전과의 호환성을 잃을 수있는 특정 구현에 연결되므로 나중에 업그레이드하려는 경우 코드를 변경할 수 있습니다. JDOM의 새로운 버전 또는 사용하는 파서 팩토리와 인터페이스를 사용하는 Java 표준 API를 고수하면 코드를 훨씬 모듈화하고 유지 관리 할 수 ​​있습니다.

제안 된 파서의 모든 (모두 확인하지는 않았지만 거의 확실합니다)은 JAXP 구현을 준수하므로 기술적으로 모든 것을 사용할 수 있습니다.


답변

다음은 DOM, SAX, StAX & TrAX에 대한 훌륭한 비교입니다 (출처 : http://download.oracle.com/docs/cd/E17802_01/webservices/webservices/docs/1.6/tutorial/doc/SJSXP2.html )

특징 SAX SAX DOM TrAX

API 유형                 풀, 스트리밍 푸시, 스트리밍 메모리 트리 XSLT 규칙

사용 편의성           높음 중간 높음 중간

XPath 기능    아니요 아니요 예 예

CPU 및 메모리     좋음 좋음 다름

전달 만        예 예 아니요 아니요

XML 읽기              예 예 예

XML 쓰기              예 아니요 예 예

CRUD                      아니요 아니요 예 아니요


답변

간단한 XML http://simple.sourceforge.net/ 은 객체를 직렬화 해제하기가 ​​매우 쉽습니다.


답변

SAX 및 DOM 외에도 XML 풀 파서 인 XMLStreamReader를 사용하여 STaX 파싱을 사용할 수 있습니다.


답변

dom4j가 XML 작업을위한 도구라는 것을 알았습니다. 특히 Xerces와 비교됩니다.


답변

나는 이것이 당신이 당신의 앱에 많은 “생각”을 가지고 있다는 것을 권장하지는 않지만 XSLT를 사용하는 것이 Java 조작보다 더 좋을 수 있습니다 (XSLT-바이트 코드 컴파일의 경우 잠재적으로 더 빠를 수 있습니다).