一个student类:
package com.xml.test;
public class Student {
private String name;
private String sex;
private int age;
public Student(){}
public Student(String name, String sex, int age) {
super();
this.name = name;
this.sex = sex;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String toString(){
return "姓名:"+name+" 性别:"+sex+" 年龄:"+age;
}
}
----------------------------------------------------------------------------------------------------------------------
dom解析
package com.xml.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
public class DomTest {
public void createXml(){
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder =
factory.newDocumentBuilder();
Document doc = builder.newDocument();
Element root = doc.createElement("students");
//设置根节点
doc.appendChild(root);
//创建二级节点
Element stu1 = doc.createElement("student");
Element stu2 = doc.createElement("student");
Element stu3 = doc.createElement("student");
root.appendChild(stu1);
root.appendChild(stu2);
root.appendChild(stu3);
//创建三级节点
Element name1 = doc.createElement("name");
name1.setTextContent("康");
Element sex1 = doc.createElement("sex");
sex1.setTextContent("男");
Element age1 = doc.createElement("age");
age1.setTextContent("29");
stu1.appendChild(name1);
stu1.appendChild(sex1);
stu1.appendChild(age1);
Element name2 = doc.createElement("name");
name2.setTextContent("sweet");
Element sex2 = doc.createElement("sex");
sex2.setTextContent("女");
Element age2 = doc.createElement("age");
age2.setTextContent("20");
stu2.appendChild(name2);
stu2.appendChild(sex2);
stu2.appendChild(age2);
Element name3 = doc.createElement("name");
name3.setTextContent("大神");
Element sex3 = doc.createElement("sex");
sex3.setTextContent("男");
Element age3 = doc.createElement("age");
age3.setTextContent("25");
stu3.appendChild(name3);
stu3.appendChild(sex3);
stu3.appendChild(age3);
TransformerFactory tranf =
TransformerFactory.newInstance();
Transformer trans = tranf.newTransformer();
//给文件转换器设置字符编码
trans.setOutputProperty("encoding", "utf-8");
trans.setOutputProperty(OutputKeys.INDENT, "yes");
//定义转换器输入对象
DOMSource source = new DOMSource(doc);
//定义转换器输出对象
Result target = new StreamResult("test.xml");
trans.transform(source, target);
} catch (Exception e) {
e.printStackTrace();
}
}
public List<Student> parseXml(String path){
try {
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder =
factory.newDocumentBuilder();
Document doc = builder.parse(path);
NodeList nl = doc.getElementsByTagName("student");
List<Student> list = new ArrayList<Student>();
for(int i=0;i<nl.getLength();i++){
Element e = (Element)nl.item(i);
String name = e.getElementsByTagName("name").item
(0).getFirstChild().getNodeValue();
String sex = e.getElementsByTagName("sex").item
(0).getFirstChild().getNodeValue();
String age = e.getElementsByTagName("age").item
(0).getFirstChild().getNodeValue();
Student stu = new Student(name,sex,Integer.parseInt
(age));
list.add(stu);
}
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
DomTest dt = new DomTest();
// List<Student> list = dt.parseXml("test.xml");
// for (Iterator iterator = list.iterator();
iterator.hasNext();) {
// Student student = (Student) iterator.next();
// System.out.println(student);
//
// }
dt.createXml();
}
}
----------------------------------------------------------------------------------------------------------------------
sax解析
package com.xml.test;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.xml.parsers.SAXParser;
import javax.xml.parsers.SAXParserFactory;
import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;
public class SaxTest {
public List<Student> saxParse(String path) {
try {
SAXParserFactory factory =
SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
List<Student> list = new ArrayList<Student>();
parser.parse(path, new MyHandler(list));
return list;
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static void main(String[] args) {
SaxTest st = new SaxTest();
List<Student> list = st.saxParse("student.xml");
for (Iterator iterator = list.iterator();
iterator.hasNext();) {
Student student = (Student) iterator.next();
System.out.println(student);
}
}
}
class MyHandler extends DefaultHandler{
private List list;
private Student stu;
private String target = "";
public MyHandler(List list){
this.list = list;
}
//开始文档
@Override
public void startDocument() throws SAXException {
System.out.println("开始解析文档");
}
//开始解析节点
@Override
public void startElement(String uri, String localName,
String qName,
Attributes attributes) throws SAXException {
System.out.println("开始解析节点:uri:"+uri
+" localName:"+localName+" qName:"+qName);
target = qName;
if(qName.equals("student")){
stu = new Student();
}
}
//节点内容
@Override
public void characters(char[] ch, int start, int length)
throws SAXException {
String content = new String(ch,start,length);
System.out.println("节点内容:"+content);
if(target.equals("name")){
stu.setName(content);
}else if(target.equals("sex")){
stu.setSex(content);
}else if(target.equals("age")){
stu.setAge(Integer.parseInt(content));
}
}
//结束解析节点
@Override
public void endElement(String uri, String localName,
String qName)
throws SAXException {
System.out.println("结束解析节点:uri:"+uri
+" localName:"+localName+" qName:"+qName);
target = "";
if(qName.equals("student")){
list.add(stu);
}
}
//文档解析结束
@Override
public void endDocument() throws SAXException {
System.out.println("结束解析文档");
}
}
分享到:
相关推荐
使用SAX DOM两种解析方式解析文件
XML学习笔记(包括Java的两种解析XML的方法)。 XML基础语法的介绍,DTD的介绍和使用。 可快速入门,也可当手册使用。
解析XML文件(字符串)的两种方法,dom4j解析XML时候忽略DTD文件验证
xml的两种解析方式sax解析和dom解析的源代码
DOM解析XML文件 JDOM解析XML文件
XML解析,有MSXML解析,和CMauk解析两种实例
python解析xml文件,python语言解析xml文件的常用的有两种方式: 通过MiniDom库解析xml文件 通过ElementTree库解析xml文件
详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法详解Java解析XML的四种方法
NULL 博文链接:https://sekiyika.iteye.com/blog/733977
支持SAX解析XML文件,DOM解析XML文件,Pull解析器解析XML文件,Pull生成XML文件,JAVA和Kotlin两种语言编写
两种解析xml方式的 demo,log4j,xmlbean等都是采用的最基础的方式。
xml的介绍使用和两种Dom和SAX的两种解析方法,还有源代码
可实现对XML报文的解析,,语言c#,可直接拿来引用该方法实现解析,内涵两种解析方法!
在JAVA中有两种常见的XML解析方式,DOM和SAX,DOM在解析的时候会将所有的数据一次性载入内存中进行解析,在数据量比较大的情况下,效率非常低.尤其在手机这种对内存和性能要求比较苛刻的设备里面这种方法并不可取. ...
java解析xml,dom解析,jsoup解析,两种不同方式的解析,完整项目
这个是关于DTD文档的编写,约束XML的格式,以及新版的约束文档schema类型的约束,包括DOM解析xml、JDOM解析xml的源码带详细注释
xml数据前后台解析;提供了两种方式:dom4j与jdom对xml文件、xml字符串的读与写操作;同时实现在前台用jquery解析xml,将数据展示在页面上,程序可以跑
一个小demo展示xml的两种解析方式和四种解析方法,以及使用XStream进行javaBean与xml、json之间的转换
dom4j---xml解析包,xml解析和以及使用java编写生成xml文件,两种使用方式,复杂和简单,必备神器
xml解析的两种常用方式, DOM解析:一次性将整个XML文档加载进内存,比较适合解析小文件,例如:GDataXml解析 SAX解析:从根元素开始,按顺序一个元素一个元素往下解析,比较适合解析大文件,例如:NSXMLParser解析