DOM은 작은 문서에 적합한 강력한 구문 분석 도구입니다.
왜 그런 말을 합니까? 전체 XML 문서를 메모리에 로드하여 문서 개체 트리를 형성하기 때문입니다.
전체적으로 무섭게 들리지만, 작은 것을 읽는 데 사용하는 것은 Sax에 비해 상당히 편리합니다.
추가 및 삭제 작업 등에 대해서는 작성할 계획이 없습니다. 튜토리얼을 보다가 보기 흉한 코드 때문에 토할 뻔했습니다.
이것이 바로 jdom 및 dom4j와 같은 도구가 나중에 존재하게 된 이유입니다.
할말은 별로 없고 그냥 코드대로 가세요
DOM 구문 분석 예
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
org.w3c.dom.Document 가져오기;
org.w3c.dom.Element 가져오기;
org.w3c.dom.NamedNodeMap 가져오기;
org.w3c.dom.Node 가져오기;
org.w3c.dom.NodeList 가져오기;
공개 수업 데모 {
public static void main(String[] args)에서 예외가 발생합니다.
//파서 팩토리 인스턴스 생성 및 파서 생성
DocumentBuilderFactory 팩토리 = DocumentBuilderFactory.newInstance();
DocumentBuilder 빌더 = Factory.newDocumentBuilder();
//파싱이 필요한 문서 객체 생성
파일 f = new File("books.xml");
//문서를 구문 분석하고 Document 객체를 반환합니다. 이때 xml 문서가 메모리에 로드되었습니다.
//좋아요, 구문 분석을 더욱 강력하게 만들고 나머지는 데이터를 가져오는 것입니다.
문서 문서 = builder.parse(f);
//문서 루트 요소를 가져옵니다.
//왜 이러는지 물어보시죠. 문서 개체 자체가 트리 구조이고 이것이 트리의 루트이기 때문입니다.
//물론 요소 컬렉션을 직접 찾아 이 단계를 생략할 수도 있습니다.
요소 루트 = doc.getDocumentElement();
//위에서 루트 노드를 찾았으며 여기서는 루트 노드 아래의 요소 컬렉션을 얻기 시작합니다.
NodeList 목록 = root.getElementsByTagName("책");
for (int i = 0; i < list.getLength(); i++) {
//item() 메소드를 통해 컬렉션의 노드를 찾아 Element 객체로 변환합니다.
요소 n = (요소) list.item(i);
//객체의 속성 맵을 가져오고 for 루프를 사용하여 추출하고 인쇄합니다.
NamedNodeMap 노드 = n.getAttributes();
for (int x = 0; x < node.getLength(); x++) {
노드 nn = node.item(x);
System.out.println(nn.getNodeName() + ": " + nn.getNodeValue());
}
//요소 내용을 인쇄합니다. 코드는 매우 복잡하며 거의 고정된 형식입니다.
System.out.println("제목: " +n.getElementsByTagName("제목").item(0).getFirstChild().getNodeValue());
System.out.println("작성자: " + n.getElementsByTagName("작성자").item(0).getFirstChild().getNodeValue());
System.out.println();
}
}
}
출력 결과: