yu0312chao
2014-10-02 12:02:14
Java XML解析的四种方法总结
ML项目工程展示图如下图:
student.xml 文件展示:
<?xml version="1.0" encoding="utf-8" ?> <person> <student id='1'> <name>余超</name> <sex>男</sex> <desc>一个执着而又天真的孩子</desc> </student> <student id='2'> <name>马靖</name> <sex>女</sex> <desc>一个特别难追求的女孩子</desc> </student> </person>
Student实体类的展示:
package net.nyist.xmlparse.domain; import java.io.Serializable; /** * @author yuchao * * @school 南阳理工软件学院移动设备应用与开发移动四班 * * @email yu0312chao@163.com * * @time 2014年9月30日 下午10:52:47 */ @SuppressWarnings("serial") public class Student implements Serializable { private int id; private String name; private String sex; private String desc; public Student() { } public Student(int id, String name, String sex, String desc) { this.id = id; this.name = name; this.sex = sex; this.desc = desc; } public int getId() { return id; } public void setId(int id) { this.id = id; } 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 String getDesc() { return desc; } public void setDesc(String desc) { this.desc = desc; } @Override public String toString() { return "Student [id=" + id + ", name=" + name + ", sex=" + sex + ", desc=" + desc + "]"; } }
方法一:通过DOM来解析XML文件
package net.nyist.xmlparse.parse.dom import java.io.InputStream; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import net.nyist.xmlparse.domain.Student; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; /** * @author yuchao * * @school 南阳理工软件学院移动设备应用与开发移动四班 * * @email yu0312chao@163.com * * @time 2014年9月30日 下午11:12:57 */ public class DocumentBuilderFactoryDemo { public static void main(String[] args) { long start = System.currentTimeMillis(); /** 首先得到:得到 DOM 解析器的工厂实例 */ Student student = null; for (int i = 0; i < nodeList.getLength(); i++) { Node node = nodeList.item(i); int id = Integer.parseInt(node.getAttributes() .getNamedItem("id").getNodeValue()); String nameValue = ""; String sexValue = ""; String descValue = ""; } catch (Exception e) { e.printStackTrace(); } for (int i = 0; students != null && students.size() > 0 && i < students.size(); i++) { System.out.println(students.get(i)); } System.out.println("共用时:"+(System.currentTimeMillis()-start)); } }
运行结果:
方法二:用SAX解析XML文件
package net.nyist.xmlparse.parse.sax; import java.io.IOException; import java.util.ArrayList; import java.util.List; import net.nyist.xmlparse.domain.Student; import org.xml.sax.Attributes; import org.xml.sax.InputSource; import org.xml.sax.Locator; import org.xml.sax.SAXException; import org.xml.sax.helpers.DefaultHandler; /** * @author yuchao * * @school 南阳理工软件学院移动设备应用与开发移动四班 * * @email yu0312chao@163.com * * @time 2014年10月1日 下午6:38:52 * * @deprecated 本类是用来对于XML文本的解析类 */ public class PersonHandle extends DefaultHandler { private Student student; private List<Student> students; /**对于这个属性的使用主要作用是为了用来存放标签的名称,由此而获得这个标签下的文本内容的值*/ private String tagName; public void endElement(String uri, String localName, String qName) throws SAXException { if ("student".equals(qName)) { students.add(student); } /**将其值变为null的主要目的是为了防止再次遍历的时候保存了结尾标签,这样会有空值的存在*/ tagName = null; } public void characters(char ch[], int start, int length) throws SAXException { if (!"".equals(tagName) && tagName != null) { if ("name".equals(tagName)) { student.setName(new String(ch, start, length)); } else if ("sex".equals(tagName)) { student.setSex(new String(ch, start, length)); } else if ("desc".equals(tagName)) { student.setDesc(new String(ch, start, length)); } } } }
package net.nyist.xmlparse.parse.sax; import java.io.IOException; import java.io.InputStream; import java.util.List; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import net.nyist.xmlparse.domain.Student; import org.xml.sax.SAXException; /** * @author yuchao * * @school 南阳理工软件学院移动设备应用与开发移动四班 * * @email yu0312chao@163.com * * @time 2014年10月1日 下午6:30:51 */ public class SaxFacroryParseDemo { public static void main(String[] args) { long start =System.currentTimeMillis(); /** 创建SAX解析器工厂对象*/ SAXParserFactory saxParserFactory = SAXParserFactory.newInstance(); try { System.out.println("共用时:"+(System.currentTimeMillis()-start)); } catch (ParserConfigurationException | SAXException | IOException e) { e.printStackTrace(); } } }
运行结果:
方法三:jdom解析XML文件:需要引入jdom.jar包
package net.nyist.xmlparse.parse.jdom; import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import net.nyist.xmlparse.domain.Student; import org.jdom.Document; import org.jdom.Element; import org.jdom.JDOMException; import org.jdom.input.SAXBuilder; /** * @author yuchao * * @school 南阳理工软件学院移动设备应用与开发移动四班 * * @email yu0312chao@163.com * * @time 2014年10月1日 下午9:08:47 */ public class SAXBuilderDemo { @SuppressWarnings("unchecked") public static void main(String[] args) { long start = System.currentTimeMillis(); SAXBuilder saxBuilder = new SAXBuilder(); /**加载资源文件*/ InputStream in = SAXBuilderDemo.class.getClassLoader() .getResourceAsStream("student.xml"); try { Document document = saxBuilder.build(in); } catch (JDOMException | IOException e) { e.printStackTrace(); } } }
运行结果:
方法四:通过dom4j解析XML引入两个包dom4j.jar、jaxen.jar
package net.nyist.xmlparse.parse.dom4j; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import net.nyist.xmlparse.domain.Student; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; /** * @author yuchao * * @school 南阳理工软件学院移动设备应用与开发移动四班 * * @email yu0312chao@163.com * * @time 2014年10月1日 下午9:45:12 */ public class SAXReaderDemo { @SuppressWarnings("unchecked") public static void main(String[] args) { long start = System.currentTimeMillis(); try { Document document = saxReader.read(in); for (int i = 0; students != null && i < students.size(); i++) System.out.println(students.get(i)); System.out.println("共用时:" + (System.currentTimeMillis() - start)); } catch (DocumentException e) { e.printStackTrace(); } } }
运行结果:
由最代码官方编辑于2014-10-2 14:42:25
猜你喜欢
请下载代码后再发表评论
文件名:xmlparse.zip,文件大小:631.604K
下载
- /
- /xmlparse
- /xmlparse/.classpath
- /xmlparse/.project
- /xmlparse/.settings
- /xmlparse/.settings/org.eclipse.jdt.core.prefs
- /xmlparse/lib
- /xmlparse/lib/dom4j.jar
- /xmlparse/lib/jaxen.jar
- /xmlparse/lib/jdom.jar
- /xmlparse/src
- /xmlparse/src/net
- /xmlparse/src/net/nyist
- /xmlparse/src/net/nyist/xmlparse
- /xmlparse/src/net/nyist/xmlparse/domain
- /xmlparse/src/net/nyist/xmlparse/parse
- /xmlparse/src/net/nyist/xmlparse/parse/dom
- /xmlparse/src/net/nyist/xmlparse/parse/dom4j
- /xmlparse/src/net/nyist/xmlparse/parse/jdom
- /xmlparse/src/net/nyist/xmlparse/parse/sax
- /xmlparse/src/net/nyist/xmlparse
- /xmlparse/src/net/nyist
- /xmlparse/src/net
- /xmlparse
相关代码
- java解析xml的四种方式
- 原 jaxb操作xml文件(自定义xml namespace 前缀,可以有多个namespace)
- java读写操作xml文件
- java最简单的xml转换java类的方法
- java dom解析xml实现学生信息管理,包括增删改查功能
- Java stax解析XML示例
- java XML文件解析,超简单DEMO
- java读取XML文件通用工具类(递归调用)
- 证精 Flex xml编辑器(老外写的)
- 原 XML文件解析java工具类dom4J使用实例
- 原证 Java通过jdom操作生成XML文件的实例代码下载
- 证 不依赖第三方jar包的通过java sax解析本地xml文件的实例代码
最近下载
我是helloworld LV23
2022年6月2日
ycb159856 LV12
2017年4月11日
scpcyzxb LV16
2017年3月5日
v512345 LV10
2016年2月14日
日久生情 LV19
2015年6月12日
jing427 LV18
2015年3月9日
zyb507 LV13
2015年1月22日
1037704496 LV1
2014年11月14日
softcore LV10
2014年10月14日
lwptest LV1
2014年10月12日
最近浏览
我是helloworld LV23
2022年6月2日
chokkint LV12
2021年10月27日
zhoujunyu LV14
2021年4月13日
773977962 LV9
2021年3月30日
1234567891011 LV5
2020年7月3日
王二麻子滴滴
2020年6月14日
暂无贡献等级
和诗夜
2020年6月13日
暂无贡献等级
下载狂魔
2020年1月16日
暂无贡献等级
AKALilgirl
2019年12月8日
暂无贡献等级
0312wangchen LV26
2019年10月31日