博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
XML生成和解析
阅读量:5787 次
发布时间:2019-06-18

本文共 4445 字,大约阅读时间需要 14 分钟。

hot3.png

1、DOM方式解析XML

    给予DOM的解析方式,是把整个XML文档加载到内存,转化成DOM树,可以随机的访问DOM树的任何数据,速度快、比较灵活,但是消耗资源比较多,不适用大的xml文档解析,测试超过10M内存溢出。

public class DOM01 {    public static void printAttr(Node node){        NamedNodeMap map = node.getAttributes();        for(int i=0;i

2、SAX方式解析xml

    SAX工作原理是对文档顺序扫描,当扫描到文档开始与结束、元素开始结束等地方时通知回调函数做出相应的动作,然后继续扫描,直至文档结束。消耗资源比较少,适合大文档解析,但是只能读取不能修改,开发也较复杂。

public class SAX extends DefaultHandler{		private List
students = null; private Student student = null; private String preTag = null;//记录上一个节点名称 @Override public void startDocument() throws SAXException { System.out.println("开始读取学生信息"); students = new ArrayList
(); } @Override public void endDocument() throws SAXException { System.out.println("\n 信息读取完毕"); } @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { if("student".equals(qName)){ student = new Student(); student.setId(attributes.getValue(0)); }preTag = qName; } @Override public void endElement(String uri, String localName, String qName) throws SAXException { if("student".equals(qName)){ students.add(student); student = null; }preTag = null; } @Override public void characters(char[] ch, int start, int length) throws SAXException { if(preTag != null){ String content = new String(ch, start, length); if("name".equals(preTag)){ student.setName(content); }else if("sex".equals(preTag)){ student.setSex(content); }else if("age".equals(preTag)){ student.setAge(content); } } } public static void main(String[] args) throws Exception{ SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser(); SAX sax = new SAX(); parser.parse("src/student.xml", sax); for(Student student : sax.students){ System.out.println(student); } } }

JDOM和DOM4j解析xml:

两个都是解析XML优秀的框架,但是两者也有区别,具体可以参考http://www.cnblogs.com/zhi-hao/p/4016363.html

JDOM封装xml实例:

public class JDOM01 {	public static void main(String[] args) throws Exception{		Element student = new Element("student");				Attribute id = new Attribute("id", "001"); 		Attribute aa = new Attribute("aa", "xx"); 		student.setAttribute(id);		student.setAttribute(aa);				Element name = new Element("name");		Element age = new Element("age");		Element sex = new Element("sex");				name.setText("张三");		student.addContent(name);		sex.setText("男");		student.addContent(sex);		age.setText("18");		student.addContent(age);				Document document = new Document(student);		XMLOutputter outputter = new XMLOutputter();		outputter.setFormat(outputter.getFormat().setEncoding("UTF-8"));				outputter.output(document, new FileOutputStream("src/student2.xml"));	}}

JDOM解析xml实例:

public class JDOM02 {	public static void main(String[] args) throws Exception{		SAXBuilder builder = new SAXBuilder();		Document document = builder.build("src/student.xml");		Element students = document.getRootElement();		List studentList = students.getChildren("student");		for(int i=0;i

DOM4j封装xml实例:

public class DOM4j01 {	public static void main(String[] args) throws Exception{		Document document = DocumentHelper.createDocument();		Element studentElement = document.addElement("student");		studentElement.addAttribute("id", "001");		studentElement.addAttribute("aa", "xx");		Element name = studentElement.addElement("name");		name.setText("张三");		Element sex = studentElement.addElement("sex");		sex.setText("男");		Element age = studentElement.addElement("age");		age.setText("20");				OutputFormat format = OutputFormat.createPrettyPrint();		format.setEncoding("UTF-8");		XMLWriter writer = new XMLWriter(new FileOutputStream("src/student3.xml"),format);		writer.write(document);		writer.close();	}}

DOM4j解析xml实例:

public class DOM4j02 {	public static void main(String[] args) throws Exception{		SAXReader saxReader = new SAXReader();		Document doc =  saxReader.read("src/student.xml");				Element rootElement = doc.getRootElement();		@SuppressWarnings("rawtypes")		Iterator iter = rootElement.elementIterator();		while(iter.hasNext()){			Element studentElement = (Element)iter.next();			System.out.println("学号:"+studentElement.attributeValue("id"));			System.out.println("姓名:"+studentElement.elementText("name"));			System.out.println("=========================================");		}	}}

总的来说DOM4J是最好的,目前许多开源项目中也大量采用 DOM4J,例如大名鼎鼎的 Hibernate 也用 DOM4J 来读取 XML 配置文件。如果不考虑可移植性,那就采用DOM4J吧

转载于:https://my.oschina.net/u/2493918/blog/760811

你可能感兴趣的文章
DEV-C++ 调试方法简明图文教程(转)
查看>>
VS2017+EF+Mysql生成实体数据模型(解决闪退的坑)
查看>>
C++多态、继承的简单分析
查看>>
库克称未来苹果用户可自己决定是否降频 网友:你是在搞笑吗?
查看>>
6倍性能差100TB容量,阿里云POLARDB咋实现?
查看>>
linux 安装 MySQLdb for python
查看>>
Sublime Text 2 技巧
查看>>
使用fscanf()函数从磁盘文件读取格式化数据
查看>>
网站一些error_log报错
查看>>
参加婚礼
查看>>
h5 audio相关手册
查看>>
JDK文章列表-转载列表
查看>>
umask--设置用户文件和目录的文件创建缺省屏蔽值
查看>>
磁盘管理-quota
查看>>
刚毕业从事java开发需要掌握的技术
查看>>
CSS Custom Properties 自定义属性
查看>>
vim
查看>>
linux sort命令详解
查看>>
windows7中如何查看一个端口正在被占用
查看>>
python常用模块
查看>>