JAVA之XML解析的两种方式
2016-10-12 11:50
232 查看
Java XML Parsing
解析XML有两种(不限于)方法: 一种是基于DOM(Document Object Model)的解析,一种是基于事件(event-based)的SAX(Sample API for XML)解析。
DOM
-Tree model parser(Object based) (Tree of nodes).
-DOM 加载所有XML到内存,然后解析。因此具有内存限制。
-DOM 可以对XML进行读写操作。
-DOM 适宜于小型的XML。
-可以对节点进行前后检索。
-运行速度慢
-JDK 7 内置
SAX
-Event based parser (Sequence of events).
-SAX 按节点,一边读一边解析。因此没有内存限制。
-SAX 只能对XML进行读操作。
-SAX 可以解析大型的XML。
-SAX 从文件头读到文件尾,不可向后检索。
-运行速度快
-需要引用第三方包:jdom
示例:
XML(text.xml)
Xml代码
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
DOM 解析
Java代码
package com.gentleman.util.xml;
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 DOMParser {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory documentBuilderFactory
= DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder
= documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(
DOMParser.class.getClassLoader().getResourceAsStream("test.xml"));
document.getDocumentElement().normalize();
System.out.println("Root Element : " +
document.getDocumentElement().getNodeName());
System.out.println("----------------------------");
NodeList nList = document.getElementsByTagName("student");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node node = nList.item(temp);
Element element = (Element) node;
System.out.println(element.getNodeName() + " : " +
element.getAttribute("rollno"));
System.out.println("First Name : " + getText(element, "firstname"));
System.out.println("Last Name : " + getText(element, "lastname"));
System.out.println("Nick Name : " + getText(element, "nickname"));
System.out.println("Marks : " + getText(element, "marks"));
System.out.println("\n");
}
}//end main().
private static String getText(Element element, String tag){
return element
.getElementsByTagName(tag)
.item(0) // get the first element of the tag name.
.getTextContent();
}
}
SAX解析
Java代码
package com.gentleman.util.xml;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class SAXParser {
public static void main(String[] args) throws Exception {
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(SAXParser.class.getClassLoader()
.getResourceAsStream("test.xml"));
Element root = doc.getRootElement();
List list = root.getChildren("student");
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
String rollno = element.getAttributeValue("rollno");
String firstname = element.getChildText("firstname");
String lastname = element.getChildTextTrim("lastname");
String nickname = element.getChild("nickname").getText();
String marks = element.getChild("marks").getTextTrim();
System.out.println("Student: " + rollno);
System.out.println("---------------------------");
System.out.println("firstname: " + firstname);
System.out.println("lastname : " + lastname);
System.out.println("nickname : " + nickname);
System.out.println("marks : " + marks);
System.out.println("\n");
}
}
}
解析XML有两种(不限于)方法: 一种是基于DOM(Document Object Model)的解析,一种是基于事件(event-based)的SAX(Sample API for XML)解析。
DOM
-Tree model parser(Object based) (Tree of nodes).
-DOM 加载所有XML到内存,然后解析。因此具有内存限制。
-DOM 可以对XML进行读写操作。
-DOM 适宜于小型的XML。
-可以对节点进行前后检索。
-运行速度慢
-JDK 7 内置
SAX
-Event based parser (Sequence of events).
-SAX 按节点,一边读一边解析。因此没有内存限制。
-SAX 只能对XML进行读操作。
-SAX 可以解析大型的XML。
-SAX 从文件头读到文件尾,不可向后检索。
-运行速度快
-需要引用第三方包:jdom
示例:
XML(text.xml)
Xml代码
<?xml version="1.0"?>
<class>
<student rollno="393">
<firstname>dinkar</firstname>
<lastname>kad</lastname>
<nickname>dinkar</nickname>
<marks>85</marks>
</student>
<student rollno="493">
<firstname>Vaneet</firstname>
<lastname>Gupta</lastname>
<nickname>vinni</nickname>
<marks>95</marks>
</student>
<student rollno="593">
<firstname>jasvir</firstname>
<lastname>singn</lastname>
<nickname>jazz</nickname>
<marks>90</marks>
</student>
</class>
DOM 解析
Java代码
package com.gentleman.util.xml;
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 DOMParser {
public static void main(String[] args) throws Exception {
DocumentBuilderFactory documentBuilderFactory
= DocumentBuilderFactory.newInstance();
DocumentBuilder documentBuilder
= documentBuilderFactory.newDocumentBuilder();
Document document = documentBuilder.parse(
DOMParser.class.getClassLoader().getResourceAsStream("test.xml"));
document.getDocumentElement().normalize();
System.out.println("Root Element : " +
document.getDocumentElement().getNodeName());
System.out.println("----------------------------");
NodeList nList = document.getElementsByTagName("student");
for (int temp = 0; temp < nList.getLength(); temp++) {
Node node = nList.item(temp);
Element element = (Element) node;
System.out.println(element.getNodeName() + " : " +
element.getAttribute("rollno"));
System.out.println("First Name : " + getText(element, "firstname"));
System.out.println("Last Name : " + getText(element, "lastname"));
System.out.println("Nick Name : " + getText(element, "nickname"));
System.out.println("Marks : " + getText(element, "marks"));
System.out.println("\n");
}
}//end main().
private static String getText(Element element, String tag){
return element
.getElementsByTagName(tag)
.item(0) // get the first element of the tag name.
.getTextContent();
}
}
SAX解析
Java代码
package com.gentleman.util.xml;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.input.SAXBuilder;
public class SAXParser {
public static void main(String[] args) throws Exception {
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(SAXParser.class.getClassLoader()
.getResourceAsStream("test.xml"));
Element root = doc.getRootElement();
List list = root.getChildren("student");
for (int i = 0; i < list.size(); i++) {
Element element = (Element) list.get(i);
String rollno = element.getAttributeValue("rollno");
String firstname = element.getChildText("firstname");
String lastname = element.getChildTextTrim("lastname");
String nickname = element.getChild("nickname").getText();
String marks = element.getChild("marks").getTextTrim();
System.out.println("Student: " + rollno);
System.out.println("---------------------------");
System.out.println("firstname: " + firstname);
System.out.println("lastname : " + lastname);
System.out.println("nickname : " + nickname);
System.out.println("marks : " + marks);
System.out.println("\n");
}
}
}
相关文章推荐
- Java解析XMl的两种方式,集合操作时NoSuchElementException异常重现
- Android/Java XML数据格式解析的两种方式
- JAVA两种XML解析方式 SAX和DOM
- Java使用SAX,XmlPull两种方式解析XML
- 11 java 王少飞-javaweb小节(XML两种解析方式)
- java 两种xml解析方式
- java解析XML的4种方式
- JavaWeb 之 XML文档的DOM和SAX解析方式详解
- java解析xml的方式
- java解析xml的几种方式
- XML的两种解析方式Dom和SAX的区别
- java解析xml的几种方式
- java解析xml的几种方式
- 介绍两种常用的XML解析方式(NSXMLParser & GDataXMLNode)
- JQuery解析xml的两种方式$.get和$.ajax
- java 解析/操作 xml 几种常用方式 xml的增加/删除/修改
- JAVA解析XML的方式DOM、SAX、DOM4J、JDOM、StAX之比较
- [收藏转帖]JAVA对XML文档的四种解析方式
- XML的两种解析方式Dom和SAX的区别
- java中解析xml文档有几种方式