>백엔드 개발 >XML/RSS 튜토리얼 >Java 읽기 및 구문 분석 XML 파일 예제

Java 읽기 및 구문 분석 XML 파일 예제

高洛峰
高洛峰원래의
2017-01-11 13:03:221612검색

로컬 xml 파일을 읽고 DOM을 통해 구문 분석합니다. DOM 구문 분석의 특징은 전체 xml 파일을 메모리에 로드하여 DOM 트리 구조를 형성하는 것입니다. 순회 및 조작이 편리합니다.

DOM 파싱의 특징은 xml 파일을 읽어서 DOM 트리 구조로 변환한 후 노드를 순회하는 것입니다.

W3c의 노드 개념입니다

xml에 많은 양의 데이터가 포함되어 있는 경우 xml을 메모리에 한 번에 로드하는 DOM의 특성상 DOM은 적합하지 않습니다. 많은 양의 XML 구문 분석이 포함되어 있습니다. 많은 양의 xml이 포함된 경우 SAX로 구문 분석하면 메모리가 절약됩니다.

다음은 DOM을 사용하여 xml 파일을 파싱하는 예입니다.

xml 파일 구조는 다음과 같습니다.

<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
 <book category="cooking">
 <title>Everyday Italian</title>
 <author>Giada De Laurentiis</author>
 <year>2005</year>
 <price>30.00</price>
 </book>
 <book category="children">
 <title>Harry Potter</title>
 <author>J K. Rowling</author>
 <year>2005</year>
 <price>29.99</price>
 </book>
 <book category="web">
 <title>XQuery Kick Start</title>
 <author>James McGovern</author>
 <year>2003</year>
 <price>49.99</price>
 </book>
 <book category="web" cover="paperback">
 <title>Learning XML</title>
 <author>Erik T. Ray</author>
 <year>2003</year>
 <price>39.95</price>
 </book>
</bookstore>

다음과 같이 xml을 파싱하는 클래스를 만듭니다. :

package xml.dom;
 
import java.io.File;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
 
public class ReadXmlFile {
  
 public static void main(String[] args) {
  
 try{
   
  File xmlFile = new File("src/resource/book.xml");
   
  DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
   
  DocumentBuilder builder = builderFactory.newDocumentBuilder();
   
  Document doc = builder.parse(xmlFile);
   
  doc.getDocumentElement().normalize();
   
  System.out.println("Root element: "+doc.getDocumentElement().getNodeName());
   
  NodeList nList = doc.getElementsByTagName("book");
   
  for(int i = 0 ; i<nList.getLength();i++){
   
  Node node = nList.item(i);
   
  System.out.println("Node name: "+ node.getNodeName());
  Element ele = (Element)node;
   
  System.out.println("----------------------------");
  if(node.getNodeType() == Element.ELEMENT_NODE){
   
  System.out.println("book category: "+ ele.getAttribute("category"));
   
  System.out.println("title name: "+ ele.getElementsByTagName("title").item(0).getTextContent());
   
  System.out.println("author name: "+ele.getElementsByTagName("author").item(0).getTextContent());
   
  System.out.println("year :"+ele.getElementsByTagName("year").item(0).getTextContent());
   
  System.out.println("price : "+ele.getElementsByTagName("price").item(0).getTextContent());
   
  System.out.println("-------------------------");
   
   
  }
   
   
  }

분석 결과:

Root element: bookstore
Node name: book
----------------------------
book category: cooking
title name: Everyday Italian
author name: Giada De Laurentiis
year :2005
price : 30.00
-------------------------
Node name: book
----------------------------
book category: children
title name: Harry Potter
author name: J K. Rowling
year :2005
price : 29.99
-------------------------
Node name: book
----------------------------
book category: web
title name: XQuery Kick Start
author name: James McGovern
year :2003
price : 49.99
-------------------------
Node name: book
----------------------------
book category: web
title name: Learning XML
author name: Erik T. Ray
year :2003
price : 39.95
-------------------------

위는 name을 통해 해당 값을 구한 것입니다.
루프 노드를 사용하여 출력하면 다음과 같습니다.
코드는 다음과 같습니다. 루프 노드 출력 방법은 다음과 같습니다.

package xml.dom;
 
import java.io.File;
 
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
 
import org.w3c.dom.Document;
import org.w3c.dom.NamedNodeMap;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
 
public class ReadXmlFile2 {
  
 public static void main(String[] args) {
 try{
   
  File xmlFile = new File("src/resource/book.xml");
   
  DocumentBuilderFactory builderFactory = DocumentBuilderFactory.newInstance();
   
  DocumentBuilder builder = builderFactory.newDocumentBuilder();
   
  Document doc = builder.parse(xmlFile);
   
  doc.getDocumentElement().normalize();
   
  System.out.println("Root element: "+doc.getDocumentElement().getNodeName());
   
   
  if(doc.hasChildNodes()){
   
  printNode(doc.getChildNodes());
  }
 }catch(Exception e){
  
 e.printStackTrace();
  
 }
  
 }
  
 public static void printNode(NodeList nodeList){
 System.out.println("------------------------");
 // System.out.println(nodeList.getLength());
 for(int i = 0; i<nodeList.getLength(); i++){
  
 Node node = (Node)nodeList.item(i);
  
  
 if(node.getNodeType() == Node.ELEMENT_NODE){
  
 System.out.println("node name: "+node.getNodeName());
  
 System.out.println("node value: "+node.getTextContent());
  
 if(node.hasAttributes()){
  NamedNodeMap nodeMap = node.getAttributes();
   
  for(int j = 0; j < nodeMap.getLength() ; j++){
   
  Node nodenew = nodeMap.item(j);
   
  System.out.println("node name "+nodenew.getNodeName());
  System.out.println("node value "+nodenew.getNodeValue());
  }
 }
 if(node.hasChildNodes()){
  printNode(node.getChildNodes());
 }
 }
  
 }
  
 }
 
}

출력 결과는 다음과 같습니다.

Root element: bookstore
------------------------
node name: bookstore
node value: 
  
 Everyday Italian
 Giada De Laurentiis
 2005
 30.00
  
  
 Harry Potter
 J K. Rowling
 2005
 29.99
  
  
 XQuery Kick Start
 James McGovern
 2003
 49.99
  
  
 Learning XML
 Erik T. Ray
 2003
 39.95
  
 
------------------------
node name: book
node value: 
 Everyday Italian
 Giada De Laurentiis
 2005
 30.00
  
node name category
node value cooking
------------------------
node name: title
node value: Everyday Italian
node name lang
node value en
------------------------
node name: author
node value: Giada De Laurentiis
------------------------
node name: year
node value: 2005
------------------------
node name: price
node value: 30.00
------------------------
node name: book
node value: 
 Harry Potter
 J K. Rowling
 2005
 29.99
  
node name category
node value children
------------------------
node name: title
node value: Harry Potter
node name lang
node value en
------------------------
node name: author
node value: J K. Rowling
------------------------
node name: year
node value: 2005
------------------------
node name: price
node value: 29.99
------------------------
node name: book
node value: 
 XQuery Kick Start
 James McGovern
 2003
 49.99
  
node name category
node value web
------------------------
node name: title
node value: XQuery Kick Start
node name lang
node value en
------------------------
node name: author
node value: James McGovern
------------------------
node name: year
node value: 2003
------------------------
node name: price
node value: 49.99
------------------------
node name: book
node value: 
 Learning XML
 Erik T. Ray
 2003
 39.95
  
node name category
node value web
node name cover
node value paperback
------------------------
node name: title
node value: Learning XML
node name lang
node value en
------------------------
node name: author
node value: Erik T. Ray
------------------------
node name: year
node value: 2003
------------------------
node name: price
node value: 39.95
------------------------

노드에 대한 질문:

<book category="cooking">
<title>Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>

책의 경우 애플리케이션: doc.getChildNodes()는 NodeList의 길이가 9인 NodeList를 가져옵니다
9개의 노드는 다음과 같습니다.
제목 노드
lang 노드
Everyday 노드
작성자 노드
Giada De Laurentiis 노드
연도 노드
2005 노드
가격 노드
30.00 노드

Java 읽기 및 XML 파일 구문 분석 예제와 관련된 더 많은 기사를 보려면 PHP에 주의하세요. 중국사이트!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.