자바 에서 XML 분석
우선 DOM(Document Object Model 문서 개체 모델)방식 을 사용한다.이 방식 으로 XML 문 서 를 해석 할 때 XML 문 서 를 전체적으로 불 러 와 문서 대상 트 리 를 만 듭 니 다.문서 의 모든 내용 은 트 리 의 노드 를 형성 합 니 다(요소,속성,텍스트).이렇게 하면 우 리 는 무 작위 로 읽 는 방식 으로 읽 을 수 있다.장점 은 우리 가 문 서 를 해석 할 때 임의의 순서 로 내용 을 조작 할 수 있 고 조작 이 유연 하 다 는 것 이다.하지만 문 서 는 전체적으로 불 러 와 야 합 니 다.그래서 문서 의 내용 이 비교적 클 때 우 리 는 그 중의 일부분 만 읽 어야 한다.분명히 문제 가 있다.따라서 우리 가 읽 은 xml 문서 가 시간 에 비해 이 방식 을 사용 할 수 있 습 니 다.이 방식 의 프로 그래 밍 도 상대 적 으로 간단 하 다.Ajax 작업 XML 과 Html 은 일반적으로 이 방식 을 사용 합 니 다)
만약 에 우리 가 다음 과 같은 xml 문서 가 존재 한다 고 가정 하면 이름 은 student.xml 입 니 다.우 리 는 DOM 방식 으로 문서 의 내용 을 분석 합 니 다.
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student>
<name>Tom</name>
<age>20</age>
<skill>java</skill>
</student>
<student>
<name>Mike</name>
<age>23</age>
<skill>.net</skill>
</student>
</students>
DOM 으로 상기 문 서 를 해석 하 는 자바 코드 는 다음 과 같 습 니 다.
package com.frank.xml;
import java.io.File;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
public class DOMSample {
/**
* @param args
* @throws IOException
* @throws SAXException
*/
public static void main(String[] args){
File file=new File("students.xml");
DocumentBuilderFactory fac=DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder;
try {
documentBuilder = fac.newDocumentBuilder();
Document document=documentBuilder.parse(file);
NodeList nodeList=document.getElementsByTagName("student");
for(int i=0;i<nodeList.getLength();i++){
//System.out.print(document.getElementsByTagName("name").item(i).getFirstChild().getNodeValue());
//System.out.print("===");
//System.out.print(document.getElementsByTagName("age").item(i).getFirstChild().getNodeValue());
//System.out.print("===");
//System.out.print(document.getElementsByTagName("skill").item(i).getFirstChild().getNodeValue());
System.out.print(nodeList.item(i).getChildNodes().item(1).getFirstChild().getNodeValue());
System.out.print("===");
System.out.print(nodeList.item(i).getChildNodes().item(3).getFirstChild().getNodeValue());
System.out.print("===");
System.out.print(nodeList.item(i).getChildNodes().item(5).getFirstChild().getNodeValue());
System.out.println("");
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
출력 결 과 는 다음 과 같 습 니 다.
Tom===20===java Mike===23===.net
주석 부분 을 주의 하 십시오.문 서 를 해석 하 는 과정 도 마 칠 수 있 습 니 다.왜 실현 할 때 하위 노드 를 얻 을 때 사용 하 는 번 호 는 1,3,5 입 니까?모든 student 이 가지 고 있 는 하위 절 포 인 트 는 3 이 아니 라 7 이기 때문에 텍스트 와 student 이 포함 하 는 텍스트(여 기 는 비어 있 습 니 다)는 같은 하위 노드 입 니 다.
SAX 로 XML 분석
SAX 로 XML 을 해석 하 는 것 은 순서 적 이다.XML 문 서 를 위 에서 아래로 해석 하 는 것 입 니 다.사건 구동 메커니즘 을 채택 하 다.한 노드 를 만 났 을 때 바로 처리 합 니 다.문서 가 전체적으로 불 러 올 때 까지 기다 리 는 것 이 아 닙 니 다.SAX 분석 방식 은 제 공 된 몇 가지 방법 을 이용 합 니 다.문서 의 일부분 을 만 났 을 때 리 셋 체 제 를 이용 하여 해당 하 는 방법 으로 적당 한 처 리 를 한다.예 를 들 어 SAX 에 조작 노드 가 존재 하 는 방법:startElement 와 endElement
시작 노드 를 만 났 을 때 startElement 를 호출 하고 끝 노드 를 만 났 을 때 endElement 를 호출 합 니 다.우 리 는 이 두 가지 방법 에서 구체 적 인 처리 과정 을 써 서 XML 문서 에 대한 해석 을 실현 하고 내용 을 읽 을 때 제공 하 는 다른 방법 characters 를 이용 할 수 있다.
또한 문 서 를 분석 할 때 호출 되 는 startDocument 와 문서 해석 이 끝 날 때 endDocument 를 호출 합 니 다.
SAX 해석 을 사용 하여 문 서 를 전체적으로 불 러 오지 않 기 때문에 비교적 큰 문 서 를 해석 할 때 SAX 방식 을 사용 하 는 것 이 좋 습 니 다.그리고 분석 속 도 는 DOM 보다 좋 지만 조작 과정 인 코딩 은 번 거 롭 습 니 다.
마찬가지 로 우 리 는 아까 의 students.xml 를 분석 하고 SAX 를 이용 하여 다음 과 같이 할 수 있 습 니 다.
package com.frank.xml;
import java.util.Stack;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SAXSample extends DefaultHandler {
Stack tags = new Stack();
/**
* @param args
*/
public static void main(String[] args) {
try{
SAXParserFactory factory=SAXParserFactory.newInstance();
SAXParser sAXParser=factory.newSAXParser();
SAXSample sAXSample=new SAXSample();
sAXParser.parse(new InputSource("students.xml"), sAXSample);
}catch(Exception ex){
ex.printStackTrace();
}
}
@Override
public void characters(char ch[], int start, int length)
throws SAXException {
// TODO Auto-generated method stub
String tag = (String) tags.peek();
if(tag.equals("name")){
System.out.println("name="+new String(ch, start, length));
}
if(tag.equals("age")){
System.out.println("age="+new String(ch, start, length));
}
if(tag.equals("skill")){
System.out.println("skill="+new String(ch,start,length));
}
}
@Override
public void endElement(String arg0, String arg1, String arg2)
throws SAXException {
// TODO Auto-generated method stub
tags.pop();
}
@Override
public void startElement(String uri,String localName,String qName,Attributes attrs) throws SAXException {
// TODO Auto-generated method stub
tags.push(qName);
}
}
실행 결 과 는 다음 과 같 습 니 다.
name=Tom age=20 skill=java name=Mike age=23 skill=.net
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.