2009-08-28 3 views
8

XML 문서를 처리하는 데 Java에서 가장 좋은 클래스는 무엇입니까?Java에서 최상의 XML 처리 클래스

+1

대부분의 Java 프레임 워크는 XML에 크게 의존하지만 언어 인 Java는 Python과 비교하여 XML 지원이 매우 좋지 않습니다. –

+3

"최고"를 정의하십시오. – Bombe

+4

프로그래밍 언어는 "Java"라고하며 약어가 아니므로 대문자 "JAVA"로 작성하면 안됩니다. – Jesper

답변

19

실제로 XML 문서로 수행 할 작업과 문서의 크기에 따라 다릅니다.

대략, 당신은 XML API를 분류 할 수 있습니다와 같은 :

  • DOM API를 - 당신이 처리 할 수있는 문서의 크기를 제한 메모리에 전체 문서를로드,하지만 내비게이션에 최적화 된 구조를 만들 수 있으며, 변환
  • 스트리밍 API - 응용 프로그램이 저수준 구문 분석 이벤트 (예 : 요소 시작, 요소 끝 등)를 해석해야하지만 메모리가 제한되지 않습니다. 스트리밍 API에는 푸시와 풀의 두 가지 종류가 있습니다. 푸시 파서는 정의한 객체에서 구문 분석 이벤트를 발생시키고 그 객체는 현재 상태 분석기 또는 스택과 같은 현재 구문 분석 상태를 추적해야합니다. 파서를 당겨서 파서로부터 파스 이벤트를 끌어낼 수 있습니다. 이렇게하면 XML 컨텐트를 처리하는 재귀 적 파생 파서를 쉽게 작성할 수 있지만 스택 크기는 처리 할 수있는 문서의 크기에 제한이됩니다.
  • XML 맵퍼 - XML ​​컨텐츠를 Java 오브젝트에 맵핑하십시오. XML 매핑에는 code-gen 또는 reflection이라는 두 가지 주요 접근 방식이 있습니다. Code-gen 맵퍼는 XML 스키마에서 Java 클래스를 생성합니다. 즉, Java 코드에서 스키마 구조를 복제 할 필요가 없지만 Java 코드가 스키마 구조를 정확하게 반영한다는 단점이 있습니다. 또한 대부분의 코드 생성기는 작동하기가 어색하고 자신의 동작이없는 NOJO 클래스를 만듭니다. 반사 형 매퍼를 사용하면 풍부한 동작을 가진 Java 클래스를 작성한 다음 XML과 매핑되는 방식을 정의 할 수 있습니다. 사전 정의 된 스키마를 준수해야하는 경우 클래스와 매핑 구성이 올바른지 확인해야합니다. 그 스키마.

    • DOM API를 : (! 분명히)가 DOM API를 표준 라이브러리의 표준되는 등 다른 라이브러리와 상호 그러나 그들은 끔찍 사용할 수

    몇 가지 옵션이 있습니다. XOM (Adam Batkin이 제공하는 것과 동일한 이유로 My favorite) 또는 JDOM과 같이 더 편리한 DOM과 유사한 API가 몇 가지 있습니다. 몇 가지를보고 원하는 API를 결정하십시오.

  • 스트리밍 API : 표준 라이브러리에는 SAX 푸시 분석기의 구현이 포함되어 있습니다. Java 용 표준 Parser는 StAX입니다.
  • 매핑 API : JAXB은 JSR 표준이지만 매핑 된 클래스 (주석 또는 XML 구성 필요 없음)에서 매핑 구성을 쉽게 구분할 수 있고 다른 데이터 형식과 개체를 매핑하기 때문에 XStream을 선호합니다.
+0

+1 : 그게 달려 있네 "- 그리고 그게 달려있는 것 –

+0

VTD-XML은 dom sax보다 낫다. 그리고 그 증거는 다음과 같다 : http://sdiwc.us/digitlib/journal_paper.php?paper=00000582 .pdf –

1

사용하기 쉽도록 JDOM이라고 생각합니다.

0

XML을 여러 가지 방식으로 처리 할 수있는 라이브러리가 많이 있으며 "최선"이라고하는 방법은 없습니다. 언제나처럼, 그것은 당신이하려는 일과 당신의 요구 사항에 달려 있습니다.

DOM과 유사한 파서가 필요하거나 XML 문서를 작성할 때 나는 개인적으로 XOM을 좋아한다. XML 문서가 잘 형성되고 "정확하다"는 것을 보장하기 때문이다. 최고의 우선 순위는 정확성입니다. 이는 다른 시스템과 상호 운용 할 때 중요합니다. XML이 매우 잘 수행합니다. API는 매우 잘 설계되고 직관적이어서 일반적인 작업을 매우 쉽게 만듭니다.

3

내가 사용했던 다른 항목 (특히 JDOM은 특히 좋지 않은 API가있는 것으로 나타났습니다) 위에는 dom4j이 나옵니다. dom4j는 XPath 지원을 위해 Jaxen을 연결할 수 있습니다.

예 :

SAXReader reader = new SAXReader(); // dom4j SAXReader 
    Document document = reader.read(xmlInputStream); // dom4j Document 

    // select all link nodes with href "http://example.com" 
    List<Element> linkNodes = document.selectNodes("//link[@href='http://example.com']"); 

    // select an attribute value 
    String val = linkNodes.get(0).attributeValue("href"); 

    // select element text and trim it 
    String value = document.elementTextTrim("childNode"); 
1

나는 JAXB와 함께 행운을 했어. 자바 SE 6에 포함되어 있습니다.

+0

JAXB는 일반적인 XML 구문 분석기가 아니라 OXM 바인딩 솔루션입니다. 그것은 XML 파서를 사용하지만 그 자체가 아닙니다. – duffymo

+2

네,하지만 일반적인 XML 파서에 대한 질문은 아닙니다. "XML 문서로 작업 할 때 Java에서 가장 좋은 클래스는 무엇입니까?" 그리고 JAXB는 확실히 대안 중 하나입니다. –

0

나는 DOM과 SAX의 고전적인 조합을 선호합니다.

0

XML 처리를위한 두 가지 접근 방식을 결정해야합니다. DOMSAX이 있으며 장점과 단점이 있습니다. 그것은 모두 사용자의 필요와 처리하려는 XML 문서의 크기에 따라 다릅니다. 이미 언급 한 JAXB은 둘 다 위에 API를 빌드하고 Java 6와 함께 제공됩니다.

위의 내용을 이해했으면 구체적인 질문이나 최상의 SAX 구현을 요청할 수 있습니다. 그 외에 요구 사항이 무엇인지 알 수 있다면 좋을 것입니다. XML을 작성하거나 읽으려고합니까? 파일의 크기는 얼마나됩니까? 등등.

편집 : 지적

Nat으로, 또한 세 번째 대안 개념으로 StAX있다.

+0

또한 SAX와 같이 낮은 수준이지만 클라이언트 코드가 파서에서 푸시 된 이벤트를 처리하는 대신 스트림에서 XML 이벤트를 가져올 수있게 해주는 StAX도 있습니다. 따라서 XML 컨텐트를 처리하기 위해 재귀 파생 파서를 쉽게 작성할 수 있습니다. – Nat

+0

@Nat : 팁을 주셔서 감사합니다! 그냥 내 대답을 편집하고 링크가 포함되어 있습니다. –

0

독서 만하는 경우 XPath를 사용하는 것이 좋습니다. 그렇지 않으면 DOM (org.w3c.dom 패키지에 있음)이 최선의 방법입니다.

+0

"best"는 이해하기 쉽고 코드 작성하기가 쉽지 않습니다. org.w3c.dom에서 인터페이스를 볼 수 있으므로 여전히 구현이 필요합니다. – duffymo

0

자바는 XML을 잘 지원합니다. 한 가지 의미에서 문제는 많은 옵션이 있다는 것입니다. 따라서 Java에서 XML을 처리하는 "방법"은 없습니다. 현재 당면한 문제를 기반으로 도구를 선택해야합니다.

트리를 쿼리하고 조작 할 수있는 개체 트리에로드하려는 복잡한 유효성이 검사 된 문서가 있다고 가정 해보십시오. 이를 위해 DOM 파서가 필요하며 선택할 수있는 숫자가 있습니다. 이렇게하면 전체 문서가 객체로 변환되어 CPU 측면에서 비용이 많이 듭니다.

특정 요소를 선택하고 성능이 문제가되는 문서가 있다고 가정 해보십시오. SAX 구문 분석기, 끌어 오기 구문 분석기 또는 XPath를 사용해보십시오.

아마도 와이어의 객체를 마샬링하거나 비 정렬 화해야 할 것입니다. JAXB는 다른 옵션과 마찬가지로이 후보입니다.

귀하의 질문에 대한 올바른 답변이 없습니다. 모든 [프로그래밍] 문제와 마찬가지로 문제를보고 옵션을 평가하고 작업에 가장 적합한 도구를 선택해야합니다.

0

XML 문서 작업이 필요할 때마다 저는 항상 dom4j/sax를 첫 번째 수단으로 생각했으며 절대로 실망감을 느끼지 못했습니다. ;)

SAXReader를 조사해야합니다.

0

@Epaga, "최고의"문맥을 사용하지 않으면 비참하게 실패 할 것입니다.

예를 들어 구조와 같은 DOM에 거대한 XML을로드하려고하면 매우 어리 석습니다. 도구를 현명하게 선택해야합니다.

0

XOM (http://www.xom.nu)은 다른 많은 파서보다 쉽고 간편하게 사용할 수있는 간단하고 유연한 XML 툴킷입니다. 표준 W3C 기반 도구에서 전환 한 이후로 내 생산성이 크게 향상되었습니다. 그의 웹 페이지에서 Elliotte Rusty Harold는 왜 XOM의 디자인이 XML DOM에 적합한 모델인지 설명합니다.