XML 학습 여행 1 - XML 해상도 기

최근 에 시험 시스템 프로젝트 를 해 야 하기 때문에 XML 을 배우 기 시 작 했 습 니 다.       
        XML 은 자바 에서 점점 광범 위 하 게 사용 되 고 있 으 며, 몇 가지 자주 사용 하 는 XML 해석 기 를 파악 하 는 것 이 필요 하 다.현재 XML 의 주요 해 기 는 DOM, SAX, JDOM 입 니 다.        DOM 은 합 법 적 인 Well - Formed 파일 을 위 한 API 응용 프로그램 인터페이스 로 이 파일 들 의 논리 적 구조, 접근 과 조작 방법 을 정의 합 니 다. W3C 가 제정 한 목 표 는 각종 프로그램 언어, 운영 체제 와 응용 프로그램 에 통용 되 는 API 를 제공 하 는 것 입 니 다. DOM 은 매우 높 은 호환성 을 가지 고 있 습 니 다.        SAX (Simple Application interface for XML) 는 이벤트 XML 해상도 기 를 기반 으로 무료 로 얻 을 수 있 는 플랫폼 언어 와 무관 한 API 로 프로그램 과 스 크 립 트 의 동적 접근 과 문서 의 내용, 구조 와 스타일 을 업데이트 할 수 있 습 니 다.        JDOM 은 두 명의 유명한 자바 개발 자 겸 작가, Brett Mclaughlin 과 Jason Hunter 의 창작 성과 로 트 리 구 조 를 바탕 으로 순수한 자바 기술 로 XML 파일 에 대한 분석, 생 성, 직렬 화 및 기타 많은 조작 을 실현 하 는 오픈 소스 프로젝트 입 니 다. JDOM 은 자바 프로 그래 밍 서 비 스 를 직접 제공 하고 강력 한 자바 언어의 여러 가지 특성 을 이용 합 니 다.SAX 와 DOM 의 기능 을 효과적으로 결합 시 켜 사용 디자인 에 있어 서 가능 한 한 원래 사용 과정 에서 의 복잡성 을 숨 깁 니 다.                DOM 과 SAX 는 API 에서 직접 찾 을 수 있 습 니 다. 그 중에서 세 개의 패 키 지 를 포함 합 니 다.
              ·org. w3c. dom, W3C 가 XML 표준 기획 문서 대상 모델 에 추천 하 는 자바 도구               ·org. xml. sax, XML 을 문법 분석 하 는 이벤트 구동 에 사용 되 는 간단 한 API               ·javax. xml. parsers, 공장 화 도구, 응용 프로그램 개발 자 들 이 특수 한 문법 분석 기 도 구 를 얻 고 설정 할 수 있 도록 합 니 다. JDOM 은 교체 할 수 있 습 니 다.               JDom 은 오픈 소스 프로젝트 로 사용 할 때 jdom. jar 를 라 이브 러 리 에 가 져 와 야 합 니 다.API 의 해석 기 를 직접 사용 하 는 것 보다 JDOM 은 사용 하기 가 훨씬 간단 합 니 다.JDom 은 2000 년 봄 Brett McLaughlin 과 Jason Hunter 에 의 해 개발 되 어 DOM 과 SAX 가 실제 응용 에서 의 부족 한 점 을 보완 했다.다음은 우 리 는 하나의 실제 예 를 통 해 각각 두 가지 방식 으로 xml 를 해석 하 는 시험 문제 파일 을 통 해 이들 의 차 이 를 비교 합 니 다.        이번에 분석 해 야 할 XML 파일 Item. xml                                      C            1             다음 메모리 에서 접근 속도 가 가장 빠 른 것 은:                    A) 하드디스크 메모리                   B) 플 로 피 디스크 메모리                   C) 반도체 RAM (메모리 저장 장치)                   D) 테이프 메모리             기본 문제                                 D            1             다음은 마이크로컴퓨터 조작 에 관 한 네 가지 서술 입 니 다. 그 중에서 정확 한 하 나 는 입 니 다.               A) 시스템 은 입력 날짜 로 아무것도 하지 않 으 며, 지난 날 짜 를 당일 날짜 로 마음대로 입력 할 수 있다               B) 사용자 가 한 문 자 를 입력 할 때마다 DOS 는 즉시 그것 을 읽 고 식별한다               C) DOS 시스템 을 시작 할 때 새 시간 을 입력 하지 않 으 려 면 사용자 가 임의의 버튼 만 누 르 면 된다.               D) 플 로 피 디스크 는 전원 을 끊 기 전에 꺼 낼 수도 있 고, 전원 을 끊 은 후에 꺼 낼 수도 있다              기본 문제                    DOM 과 SAX 를 사용 하여 Item. xml 를 분석 한 적 이 있 습 니 다. DomExample. 자바 
package action;

 /**
 *
 * @author weiqishaonian
 */
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;

import java.util.logging.Level;
import java.util.logging.Logger;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
//     org.xml.sax   
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class DomExample {

    private Document doc;
    private InputStream is = null;

    public DomExample(String xmlFilePath) {
        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();//(1)  DOM        
            DocumentBuilder db = dbf.newDocumentBuilder();//(2) DOM    DOM   
            is = new FileInputStream(xmlFilePath);//(3)     XML        ,  DOM      
            doc = db.parse(is);//(4)  XML      ,    Document
            Element emt = doc.getDocumentElement();//(5)  XML      
            NodeList list = emt.getChildNodes();//(6)        
            if (list != null) {
                for (int i = 0; i < list.getLength(); i++) {
                    Node item = list.item(i);
                    if (item.getNodeType() == Node.ELEMENT_NODE) {
                        //(7)        
                        String id = item.getAttributes().getNamedItem("id").getNodeValue();
                        System.out.println(id);
                        //(8)     
                        for (Node node = item.getFirstChild(); node != null; node = node.getNextSibling()) {
                            if (node.getNodeType() == Node.ELEMENT_NODE) {
                                if (node.getNodeName().equals("answer")) {
                                    String answer = node.getFirstChild().getNodeValue();//      
                                    System.out.println(answer);
                                }
                                if (node.getNodeName().equals("level")) {
                                    String level = node.getFirstChild().getNodeValue();//      
                                    System.out.println(level);
                                }
                                if (node.getNodeName().equals("question")) {
                                    String question = node.getFirstChild().getNodeValue();//    
                                    System.out.println(question);
                                }
                                if (node.getNodeName().equals("questionType")) {
                                    String questionType = node.getFirstChild().getNodeValue();//      
                                    System.out.println(questionType);
                                }
                            }
                        }
                    }
                }
            }
            is.close();
        } catch (SAXException ex) {
            Logger.getLogger(ItemXMLParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(ItemXMLParser.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParserConfigurationException ex) {
            Logger.getLogger(ItemXMLParser.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        System.out.println("===========================================");
        new DomExample("D:/item.xml");
        System.out.println("===========================================");
    }

}


 실행 결과: run - single: = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =   A) 하드디스크 메모리   B) 플 로 피 디스크 메모리   C) 반도체 RAM (메모리 저장 장치)   D) 테이프 메모리 기본 문제 2D 1 다음은 마이크로컴퓨터 조작 에 관 한 네 가지 서술 입 니 다. 그 중에서 정확 한 하 나 는 입 니 다.   A) 시스템 은 입력 날짜 로 아무것도 하지 않 으 며, 지난 날 짜 를 당일 날짜 로 마음대로 입력 할 수 있다   B) 사용자 가 한 문 자 를 입력 할 때마다 DOS 는 즉시 그것 을 읽 고 식별한다   C) DOS 시스템 을 시작 할 때 새 시간 을 입력 하지 않 으 려 면 사용자 가 임의의 버튼 만 누 르 면 된다.   D) 플 로 피 디스크 는 전원 을 끊 기 전에 꺼 낼 수도 있 고 전원 을 끊 은 후에 기본 문 제 를 꺼 낼 수도 있다 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = BUILD SUCCESSFUL (totalk time: 0 seconds) 은 JDOM 을 사용 하여 Item. xml 를 해석 한 적 이 있다. JDomExample. 자바
package action;

/**
 *
 * @author weiqishaonian
 */
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;

public class JDomExample {

    public JDomExample(String xmlFilePath) {
        try {
            SAXBuilder sb = new SAXBuilder();//
            Document doc = sb.build(new FileInputStream(xmlFilePath));
            Element root = doc.getRootElement(); //     
            List items = root.getChildren(); //             
            for (int i = 0; i < items.size(); i++) {
                Element item = (Element) items.get(i); //   i item  
                System.out.println(item.getAttribute("id").toString());
                Element answer = item.getChild("answer"); //      
                System.out.println(answer.getText());
                Element level = item.getChild("level"); //      
                System.out.println(level.getText());
                Element question = item.getChild("question"); //    
                System.out.println(question.getText());
                Element questionType = item.getChild("questionType"); //      
                System.out.println(questionType.getText());
            }
        } catch (JDOMException ex) {
            Logger.getLogger(JDomExample.class.getName()).log(Level.SEVERE, null, ex);
        } catch (IOException ex) {
            Logger.getLogger(JDomExample.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public static void main(String[] args) {
        System.out.println("===========================================");
        new JDomExample("D:/item.xml");
        System.out.println("===========================================");
    }
}


 실행 결과: run - single: = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = =   A) 하드디스크 메모리   B) 플 로 피 디스크 메모리   C) 반도체 RAM (메모리 저장 장치)   D) 테이프 메모리 기본 문제 [Attribute: id = "2"] D1 다음은 마이크로컴퓨터 조작 에 관 한 네 가지 서술 입 니 다. 그 중에서 정확 한 하 나 는: 입 니 다.   A) 시스템 은 입력 날짜 로 아무것도 하지 않 으 며, 지난 날 짜 를 당일 날짜 로 마음대로 입력 할 수 있다   B) 사용자 가 한 문 자 를 입력 할 때마다 DOS 는 즉시 그것 을 읽 고 식별한다   C) DOS 시스템 을 시작 할 때 새 시간 을 입력 하지 않 으 려 면 사용자 가 임의의 버튼 만 누 르 면 된다.   D) 플 로 피 디스크 는 전원 을 끊 기 전에 꺼 낼 수도 있 고 전원 을 끊 은 후에 기본 문 제 를 꺼 낼 수도 있다 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = BUILD SUCCESSFUL (totalk time: 0 seconds)        위의 두 문 서 를 비교 해 보면 우 리 는 차 이 를 뚜렷하게 볼 수 있다.JDOM 해석 은 DOM 과 SAX 를 사용 하여 해석 하 는 것 보다 더 간단 하 며, 같은 기능 을 완성 하려 면 DOM 과 SAX 를 사용 하 는 것 보다 코드 가 적 고 (DomExample. java 와 JDomExample. java 파일 을 보십시오) JDOM 코드 를 사용 하 는 것 이 더욱 뚜렷 해 보 입 니 다.JDom 은 JAVA 를 위해 직접 프로 그래 밍 서 비 스 를 제공 합 니 다.그것 은 더욱 강력 한 JAVA 언어의 여러 가지 특성 (방법 과부하, 집합 개념 과 맵) 을 이용 하여 SAX 와 DOM 의 기능 을 효과적으로 결합 시 켰 다.Jdom 은 자바 언어 로 XML 을 읽 고 쓰 고 조작 하 는 새로운 API 함수 다.Jason Hunter 와 Brett McLaughlin 은 1.0 버 전 을 공개 적 으로 발표 했다.직관 적 이 고 간단 하 며 효율 적 인 전제 에서 이러한 API 함 수 는 최대한 최적화 되 었 다.다음 지면 에 서 는 이미 존재 하 는 XML 문 서 를 Jdom 으로 읽 는 방법 을 소개 한다.사용 디자인 에 있어 서 XML 을 사용 하 는 과정 에서 의 복잡성 을 가능 한 한 숨 깁 니 다.JDOM 을 이용 하여 XML 문 서 를 처리 하 는 것 은 쉽 고 간단 한 일이 될 것 이다.

좋은 웹페이지 즐겨찾기