JAVA 의 XML 에 대한 몇 가지 해석 방식
http://www.ibm.com/developerworks/cn/xml/theme/x-java.html
기본적으로 JAVA 와 XML 의 모든 면 을 포함 하고 있 습 니 다.
1. 소개
1) DOM (JAXP Crimson 해석 기)
DOM 은 플랫폼 과 언어 와 무관 한 방식 으로 XML 문 서 를 표시 하 는 공식 W3C 표준 이다.DOM 은 계층 구조 로 구 성 된 노드 나 정보 단편 적 인 집합 이다.이 계층 구 조 는 개발 자 들 이 나무 에서 특정 정 보 를 찾 을 수 있 도록 해 준다.이 구 조 를 분석 하려 면 보통 전체 문서 와 구조 차원 구 조 를 불 러 와 야 모든 일 을 할 수 있다.이것 은 정보 차원 을 바탕 으로 하기 때문에 DOM 은 트 리 나 대상 을 바탕 으로 하 는 것 으로 여 겨 진다.DOM 과 넓 은 의미 의 트 리 기반 처리 가 몇 가지 장점 을 가지 고 있 습 니 다.우선, 트 리 는 메모리 에 오래 지속 되 기 때문에 프로그램 이 데이터 와 구 조 를 변경 할 수 있 도록 수정 할 수 있 습 니 다.SAX 처럼 일회 성 처리 가 아니 라 언제든지 트 리 에서 위아래 로 내 비게 이 션 할 수 있다.DOM 은 사용 하기에 도 훨씬 간단 하 다.
2)SAX
SAX 처리 의 장점 은 스 트 리밍 매체 의 장점 과 매우 유사 하 다.분석 은 모든 데이터 가 처리 되 기 를 기다 리 는 것 이 아니 라 바로 시작 할 수 있다.그리고 응용 프로그램 은 데 이 터 를 읽 을 때 만 데 이 터 를 검사 하기 때문에 데 이 터 를 메모리 에 저장 할 필요 가 없다.이것 은 대형 문서 에 있어 서 매우 큰 장점 이다.사실 응용 프로그램 은 전체 문 서 를 해석 할 필요 도 없다.그것 은 어떤 조건 이 만족 되 었 을 때 해석 을 멈 출 수 있다.일반적으로, SAX 는 그것 의 대체 자 DOM 보다 훨씬 빠르다.
DOM 을 선택 하 시 겠 습 니까? SAX 를 선택 하 시 겠 습 니까?XML 문 서 를 처리 하기 위해 코드 를 작성 해 야 하 는 개발 자 에 게 DOM 인지 SAX 해석 모델 을 선택 하 는 것 은 매우 중요 한 디자인 결정 이다.DOM 은 트 리 구 조 를 만 드 는 방식 으로 XML 문 서 를 방문 하고 SAX 는 이벤트 모델 을 사용 합 니 다.
DOM 해상도 기 는 XML 문 서 를 그 내용 을 포함 하 는 트 리 로 바 꾸 고 트 리 를 옮 겨 다 닐 수 있 습 니 다.DOM 으로 모델 을 분석 하 는 장점 은 프로 그래 밍 이 쉽다 는 것 이다. 개발 자 는 트 리 를 만 드 는 명령 만 호출 한 다음 에 navigation API 를 이용 하여 필요 한 트 리 노드 를 방문 하여 임 무 를 완성 해 야 한다.트 리 의 요 소 를 쉽게 추가 하고 수정 할 수 있 습 니 다.그러나 DOM 해상도 기 를 사용 할 때 전체 XML 문 서 를 처리 해 야 하기 때문에 성능 과 메모리 에 대한 요구 가 비교적 높다. 특히 매우 큰 XML 파일 을 만 났 을 때.옮 겨 다 니 는 능력 때문에 DOM 해상도 기 는 XML 문서 가 자주 바 뀌 어야 하 는 서비스 에 자주 사 용 됩 니 다.
SAX 해상도 기 는 이벤트 기반 모델 을 사용 합 니 다. XML 문 서 를 분석 할 때 일련의 이 벤트 를 촉발 할 수 있 습 니 다. 주어진 tag 를 발 견 했 을 때 리 셋 방법 을 활성화 하여 이 방법 으로 만 든 탭 을 찾 았 음 을 알려 줍 니 다.SAX 는 메모리 에 대한 요구 가 비교적 낮 습 니 다. 개발 자 스스로 처리 할 tag 를 결정 하도록 하기 때 문 입 니 다. 특히 개발 자가 문서 에 포 함 된 일부 데이터 만 처리 해 야 할 때 SAX 의 이러한 확장 능력 은 더욱 잘 나타 납 니 다.그러나 SAX 해상도 기 를 사용 할 때 인 코딩 작업 이 어렵 고 같은 문서 의 여러 데 이 터 를 동시에 접근 하기 어렵다.
3)JDOM http://www.jdom.org
JDOM 의 목적 은 자바 의 특정 문서 모델 이 되 는 것 이다. XML 과 의 상호작용 을 간소화 하고 DOM 을 사용 하 는 것 보다 빠르다.첫 번 째 자바 특정 모델 이기 때문에 JDOM 은 큰 홍보 와 추진 을 받 아 왔 다.'자바 규범 요청 JSR - 102' 를 통 해 최종 적 으로 '자바 표준 확장' 으로 사용 하 는 것 을 고려 하고 있 습 니 다.2000 년 초부 터 JDOM 개발 이 시 작 됐 습 니 다.
JDOM 과 DOM 은 주로 두 가지 측면 이 다르다.우선 JDOM 은 인 터 페 이 스 를 사용 하지 않 고 구체 적 인 클래스 만 사용한다.이 는 어떤 면 에 서 는 API 를 간소화 하지만 유연성 도 제한 했다.둘째, API 는 Collections 류 를 대량으로 사용 하여 이러한 종류의 자바 개발 자 들 의 사용 을 간소화 했다.
JDOM 문 서 는 "20% (또는 더 적은) 의 정력 으로 80% (또는 더 많은) 자바 / XML 문 제 를 해결 하 는 것" (학습 곡선 에 따라 20% 로 가정) 이 목적 이 라 고 밝 혔 다.JDOM 은 대부분의 자바 / XML 응용 프로그램 에 당연히 유용 하 며, 대부분의 개발 자 들 은 API 가 DOM 보다 훨씬 쉽게 이해 할 수 있다 는 것 을 발견 했다.JDOM 은 사용자 가 XML 에서 의미 없 는 일 을 하지 않도록 프로그램 행위 에 대한 광범 위 한 검 사 를 포함한다.그러나 기본 을 초과 하 는 작업 을 하거나 어떤 상황 에서 의 오 류 를 이해 할 수 있 도록 XML 을 충분히 이해 해 야 합 니 다.DOM 이나 JDOM 인 터 페 이 스 를 배 우 는 것 보다 더 의미 있 는 작업 일 수도 있다.
JDOM 자체 에는 해상도 가 포함 되 어 있 지 않 습 니 다.이것 은 보통 SAX2 해상도 기 를 사용 하여 입력 XML 문 서 를 분석 하고 검증 합 니 다. (비록 이전 구조의 DOM 을 입력 으로 표시 할 수 있 지만)JDOM 을 SAX2 이벤트 흐름, DOM 모델 또는 XML 텍스트 문서 로 출력 하 는 변환 기 를 포함 합 니 다.JDOM 은 아파 치 라이선스 변형 에 의 해 발 표 된 오픈 소스 코드 다.
4)DOM4J http://dom4j.sourceforge.net
DOM4J 는 완전히 독립 된 개발 결 과 를 대 표 했 지만 처음에는 JDOM 의 스마트 한 지점 이 었 다.이 는 통합 적 인 XPath 지원, XML Schema 지원, 큰 문서 나 스 트림 문서 에 사용 되 는 이벤트 기반 처 리 를 포함 하여 기본 XML 문서 이상 의 기능 을 합 쳤 다.DOM4J API 와 표준 DOM 인 터 페 이 스 를 통 해 병렬 접근 기능 을 가 진 구축 문서 표시 옵션 도 제공 합 니 다.2000 하반기 부터 개발 중이 다.
이러한 모든 기능 을 지원 하기 위해 DOM4J 는 인터페이스 와 추상 적 인 기본 클래스 방법 을 사용한다.DOM4J 는 API 의 Collections 류 를 대량으로 사 용 했 지만 많은 경우 에 더 좋 은 성능 이나 직접적인 인 코딩 방법 을 허용 하 는 대체 방법 을 제공 합 니 다.직접적인 장점 은 DOM4J 가 더 복잡 한 API 의 대 가 를 치 렀 지만 JDOM 보다 훨씬 큰 유연성 을 제공 했다 는 점 이다.
유연성, XPath 통합 과 큰 문서 처리 목 표를 추가 할 때 DOM4J 의 목 표 는 JDOM 과 같 습 니 다. 자바 개발 자 에 대한 용이 성과 직관 적 인 조작 입 니 다.JDOM 보다 더 완전한 솔 루 션 이 되 어 모든 자바 / XML 문 제 를 본질 적 으로 다 루 겠 다 는 목 표를 달성 하 는 데 도 주력 하고 있다.이 목 표를 달성 할 때 는 JDOM 보다 부정 확 한 프로그램 행 위 를 방지 하 는 것 을 강조 하지 않 는 다.
DOM4J 는 매우 우수한 자바 XML API 로 성능 이 우수 하고 기능 이 강하 며 사용 하기 쉬 운 특징 을 가지 고 있 으 며 소스 코드 를 개방 하 는 소프트웨어 이기 도 하 다.이제 점점 더 많은 자바 소프트웨어 가 DOM4J 를 사용 하여 XML 을 읽 고 쓰 는 것 을 볼 수 있다. 특히 Sun 의 JAXM 도 DOM4J 를 사용 하고 있다.
2. 비교
1) DOM4J 의 성능 이 가장 좋 고 Sun 의 JAXM 도 DOM4J 를 사용 하고 있 습 니 다. 현재 많은 오픈 소스 프로젝트 에서 DOM4J 를 대량으로 사용 하고 있 습 니 다. 예 를 들 어 유명한 Hibernate 도 DOM4J 로 XML 설정 파일 을 읽 습 니 다.이식 성 을 고려 하지 않 으 면 DOM4J 를 사용한다.
2) JDOM 과 DOM 은 성능 테스트 에서 좋 지 않 았 고 10M 문 서 를 테스트 할 때 메모리 가 넘 쳤 다.작은 문서 의 경우 DOM 과 JDOM 을 사용 하 는 것 도 고려 해 야 한다. JDOM 개발 자 들 은 정식 발행 전에 성능 문제 에 전념 하 기 를 원한 다 고 설 명 했 지만 성능 관점 에서 볼 때 추천 할 만 한 점 이 없다.또 DOM 은 좋 은 선택 이다.DOM 은 다양한 프로 그래 밍 언어 에 광범 위 하 게 응용 된다.이것 은 XML 과 관련 된 다른 표준 의 기초 이기 도 합 니 다. W3C 추천 (비 표준 적 인 자바 모델 과 상대 적 으로) 을 정식으로 받 았 기 때문에 특정한 유형의 프로젝트 에서 도 필요 할 수 있 습 니 다 (예 를 들 어 자바 스 크 립 트 에서 DOM 을 사용 합 니 다).
3) SAX 의 표현 이 좋 습 니 다. 이것 은 특정한 해석 방식 인 이벤트 구동 에 의존 해 야 합 니 다.다가 오 는 XML 흐름 을 SAX 에서 감지 하지만 메모리 에 불 러 오지 않 았 습 니 다. (물론 XML 흐름 이 읽 힐 때 일부 문 서 는 메모리 에 잠시 숨 어 있 습 니 다.)
3. 네 가지 XML 조작 방식 의 기본 적 인 사용 방법
<?xml version="1.0" encoding="GB2312"?>
<RESULT>
<VALUE>
<NO>A1234</NO>
<ADDR> XX XX XX X XX </ADDR>
</VALUE>
<VALUE>
<NO>B1234</NO>
<ADDR> XX XX XX XX </ADDR>
</VALUE>
</RESULT>
1)DOM
import java.io.*;
import java.util.*;
import org.w3c.dom.*;
import javax.xml.parsers.*;
public class MyXMLReader{
public static void main(String arge[]){
long lasting =System.currentTimeMillis();
try{
File f=new File("data_10k.xml");
DocumentBuilderFactory factory=DocumentBuilderFactory.newInstance();
DocumentBuilder builder=factory.newDocumentBuilder();
Document doc = builder.parse(f);
NodeList nl = doc.getElementsByTagName("VALUE");
for (int i=0;i<nl.getLength();i++){
System.out.print(" :" +
doc.getElementsByTagName("NO").item(i).getFirstChild().getNodeValue());
System.out.println(" :" +
doc.getElementsByTagName("ADDR").item(i).getFirstChild().getNodeValue());
}
}catch(Exception e){
e.printStackTrace();
}
2)SAX
import org.xml.sax.*;
import org.xml.sax.helpers.*;
import javax.xml.parsers.*;
public class MyXMLReader extends DefaultHandler {
java.util.Stack tags = new java.util.Stack();
public MyXMLReader() {
super();
}
public static void main(String args[]) {
long lasting = System.currentTimeMillis();
try {
SAXParserFactory sf = SAXParserFactory.newInstance();
SAXParser sp = sf.newSAXParser();
MyXMLReader reader = new MyXMLReader();
sp.parse(new InputSource("data_10k.xml"), reader);
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(" :" + (System.currentTimeMillis() - lasting) + " ");}
public void characters(char ch[], int start, int length) throws SAXException {
String tag = (String) tags.peek();
if (tag.equals("NO")) {
System.out.print(" :" + new String(ch, start, length));
}
if (tag.equals("ADDR")) {
System.out.println(" :" + new String(ch, start, length));
}
}
public void startElement(String uri,String localName,String qName,Attributes attrs) {
tags.push(qName);}
}
3)JDOM
import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
public class MyXMLReader {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
SAXBuilder builder = new SAXBuilder();
Document doc = builder.build(new File("data_10k.xml"));
Element foo = doc.getRootElement();
List allChildren = foo.getChildren();
for(int i=0;i<allChildren.size();i++) {
System.out.print(" :" +
((Element)allChildren.get(i)).getChild("NO").getText());
System.out.println(" :" +
((Element)allChildren.get(i)).getChild("ADDR").getText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
4)DOM4J
import java.io.*;
import java.util.*;
import org.dom4j.*;
import org.dom4j.io.*;
public class MyXMLReader {
public static void main(String arge[]) {
long lasting = System.currentTimeMillis();
try {
File f = new File("data_10k.xml");
SAXReader reader = new SAXReader();
Document doc = reader.read(f);
Element root = doc.getRootElement();
Element foo;
for (Iterator i = root.elementIterator("VALUE"); i.hasNext() {
foo = (Element) i.next();
System.out.print(" :" + foo.elementText("NO"));
System.out.println(" :" + foo.elementText("ADDR"));
}
} catch (Exception e) {
e.printStackTrace();
}
)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Is Eclipse IDE dying?In 2014 the Eclipse IDE is the leading development environment for Java with a market share of approximately 65%. but ac...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.