XML 파일 에 대한 자바 분석

6368 단어 자바xmlJava
XML 프로필
XML 을 둘 러 싼 네 가지 기술:
1.데이터 정의 Schema,DTD
2.데이터 분석 DOM,SAX 두 가지 분석 모델
3.스타일 스타일 스타일 XSTL,XSTL 을 사용 하면 XML 파일 에 저 장 된 내용 을 지정 한 스타일 에 따라 HTML 페이지 로 표시 할 수 있 습 니 다
4.언어 JAVA,NET,JavaScript 등 을 실현 하고 거의 모든 프로그램 언어 를 지원 합 니 다.XML 을 조작 하 는 모든 기능 은 추가 언어 로 제공 된다.다른 자바 에 서 는 SAX,JDOM,dom4j 등 API 를 사용 하여 XML 데 이 터 를 조작 할 수 있다.
기본 문법:
성명
XML 성명 은 xml 요소 에 속 하지 않 기 때문에 표 시 를 끝 낼 필요 가 없습니다.
XML 문 서 는 하나의 요소 만 있 습 니 다.전체 문 서 를 정의 하기 위해 서 는 별도의 표 시 를 포함 해 야 합 니 다.
XML 은 대소 문자 가 민감 하 다.
이전 문자:특정한 노드 의 데이터 에 전의 가 필요 한 문자 가 많이 포함 되 어 있 을 때 CDATA 를 사용 할 수 있 습 니 다.
시작 으로]]>로 끝나 면 포 함 된 텍스트 는 일반 텍스트 로 처리 되 고 모든 특수 기 호 는 무 시 됩 니 다.단,CDATA 는 더 이상 포함 할 수 없 으 며,라벨 에 빈 칸 이 있어 서 는 안 됩 니 다.
XML 해석
DOM 해석
   DOM 분석(Document Object Mode)은 대상 을 기반 으로 하 는 API 로 XML 의 내용 을 메모리 에 불 러 와 XML 문서 의 내용 에 대응 하 는 대상 모델 을 생 성 합 니 다.분석 이 완료 되면 메모리 에 XML 문서 의 구조 에 대응 하 는 DOM 대상 트 리 가 생 성 됩 니 다.이렇게 하면 나무의 구조 에 따라 노드 형식 으로 문 서 를 조작 할 수 있다.
특징:작은 XML 파일 에 대해 서 는 이렇게 처리 하 는 것 이 편리 하지만 큰 XML 파일 을 만 났 을 때 DOM 분석 은 메모리 사용량 이 많 고 검색 속도 가 느 립 니 다.
다음 세 단 계 를 통 해 XML 파일 에 대응 하 는 Document 대상 을 만 듭 니 다.
DocumentBuilderFactorybuilderFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder =builderFactory.newDocumentBuilder();
Document document = builder.parse(file);
기타 방법 은 JDK,javax.xml.*를 참고 할 수 있 습 니 다.org.w3c.dom.
   SAX 해석
SAX 해상도 기 는 XML 문서 의 해석 을 XML 문서 의 시작 위치 에서 해석 하 는 동시에 정 의 된 이벤트 프로세서 에 따라 현재 분석 한 부분(요소,속성 또는 요소 내용)을 기록 하고 저장 할 필요 가 있 는 지 여 부 를 결정 합 니 다.
특징:DOM 해석 보다 효율 이 우수 합 니 다.
SAX 해석 은 이벤트 구동 입 니 다.이벤트 감청 대상 을 정의 해 야 합 니 다(DefaultHandler 클래스 계승 가능)
다음 세 가지 절 차 를 통 해 XML 분석 대상 을 만 듭 니 다.
      SAXParserFactory factory = SAXParserFactory.newInstance();
      SAXParser parser = factory.newSAXParser();
      parser.parse(new File(""), new DefaultHandler());
기타 구체 적 인 방법 은 JDK:org.xml.sax.*를 참고 할 수 있 습 니 다.javax.xml.parsers.
DOM 과 SAX 는 모두 JDK 가 제공 하 는 XML 을 해석 하 는 API 이지 만 실제 개발 에 서 는 많은 코드 를 다시 작성 해 야 하기 때문에 거의 사용 되 지 않 습 니 다.
XML 과 자바 클래스(POJO 클래스)맵 JAXB
자바 대상 XML,marshal 로 전환
XML 에서 자바 대상,unmarshal 로 전환
이 방법 도 JDK 가 제공 한 것 입 니 다:javax.xml.bid.*
주석:
참고 할 만하 다http://liubuzhudeyun.iteye.com/blog/1518523
http://blog.sina.com.cn/s/blog_4a5ca0240100hmo9.html
Dom4j
http://www.blogjava.net/i369/articles/154264.html
http://www.ibm.com/developerworks/cn/xml/x-dom4j.html
dom4j 의 도구 클래스:
package com.xml.dom4j;
import java.io.FileWriter;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.XPath;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
/**
 *dom4j        
 *    :
 *http://sourceforge.net/projects/dom4j/files/dom4j-2.0.0-ALPHA-2/
 *             API      
 */
public class XmlUtil {
      
    /**
     * tagName=list
     *   element     
     * Element interface defines an XML element.
     * An element can have declared namespaces, attributes, child nodes and textual content
     * http://hi.daidu.com/331703405/item/d3a7388916fcc8d75e0c1d1
     * @param document
     * @param nameSpace
     * @param tagName
     * @return
     */
    public static List getElementsByNameSpace(Document document, String nameSpace, String tagName){
        Map map = new HashMap();
        map.put("ns", nameSpace);
        XPath xPath = document.createXPath("//ns:" + tagName);
        xPath.setNamespaceURIs(map);
        List list = xPath.selectNodes(document);
        return list;
    }
      
    /**
     *                StringBuffer    
     *     xml         Freemarker  
     * @param document
     * @throws IOException
     *     API    
     */
    public void write(Document document) throws IOException {
        // lets write to a file
        XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
        writer.write(document);
        writer.close();
        // Pretty print the document to System.out
        OutputFormat format = OutputFormat.createPrettyPrint();
        writer = new XMLWriter( System.out, format);
        writer.write(document);
        // Compact format to System.out
        format = OutputFormat.createCompactFormat();
        writer = new XMLWriter(System.out, format);
        writer.write(document);
    }
    /**
     * tagPaht = root.response.list
     * @param document
     * @param tagPath
     * @return
     */
    public static List getElementsByTagPath(Document document, String tagPath){
         List list = null;
         Element root = document.getRootElement();
         String[] tags = tagPath.split("\\.");
         if(tags[0].equals(root.getName())){
             Element element = root;
             for (int i = 1; i < tags.length; i++) {
                if(i < tags.length - 1){
                    element = element.element(tags[i]);
                    if(element == null) break;
                }else{
                    list = element.elements(tags[i]);
                }
            }
         }
         return list;
    }
    /**
     *          
     * tagPath = root.response.name
     * @param document
     * @param tagPath
     * @return
     */
    public static String getElementTextByTagPath(Document document, String tagPath){
        String text = "";
         Element root = document.getRootElement();
         String[] tags = tagPath.split("\\.");
         if(tags[0].equals(root.getName())){
             Element element = root;
             for (int i = 1; i < tags.length; i++) {
                if(i < tags.length - 1){
                    element = element.element(tags[i]);
                    if(element == null) break;
                }else{
                    text = element.elementText(tags[i]);
                }
            }
         }
         return text;
    }
      
      
}

JDOM
http://wenku.baidu.com/link?url=Ld4--fSpe26yGxdBE-MsJhjDfIy4OKD8ee06aYrVWZH5Q8GqPeshPKp3DuU99OipK2b2CHi5rS8yUNtGSCk8JwZBJzHxvP6iI-lIk2kMkE3
http://www.cnblogs.com/fancyzero/archive/2012/06/09/jdom.html
http://blog.sina.com.cn/s/blog_67da087b0100i4xf.html

좋은 웹페이지 즐겨찾기