java.lang.AbstractMethodError: org.apache.xerces.dom.DocumentImpl.setXmlVersion 문제 해결 방법
DOM 해석의 특성은 xml 파일을 읽고dom 트리 구조로 변환하여 노드를 통해 훑어보는 것이다.
이것은 W3c의 노드에 대한 개념이다
만약에 xml에 대량의 데이터가 포함된다면dom는 메모리에 xml을 한꺼번에 불러오는 특성 때문에dom는 대량의 데이터를 포함하는 xml 해석에 적합하지 않습니다.패키지가 대량의 xml을 함유하고 있을 때 SAX로 해석하면 메모리를 절약할 수 있다.
다음은 DOM을 사용하여 xml 파일을 분석하는 예입니다.
xml 파일 구조는 다음과 같습니다.
<?xml version="1.0" encoding="ISO-8859-1"?>
<bookstore>
<book category="cooking">
<title lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
<book category="children">
<title lang="en">Harry Potter</title>
<author>J K. Rowling</author>
<year>2005</year>
<price>29.99</price>
</book>
<book category="web">
<title lang="en">XQuery Kick Start</title>
<author>James McGovern</author>
<year>2003</year>
<price>49.99</price>
</book>
<book category="web" cover="paperback">
<title lang="en">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 lang="en">Everyday Italian</title>
<author>Giada De Laurentiis</author>
<year>2005</year>
<price>30.00</price>
</book>
책 응용 프로그램:doc.getChildNodes () 는 NodeList 를 하나 받았는데 그 중 NodeList 의 길이는 9입니다.9개의 노드는 다음과 같습니다.
title 노드
lang 노드
Everyday 노드
author 노드
Giada De Laurentiis 노드
year 노드
2005 노드
price 노드
30.00 노드
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.