- 浏览: 16750 次
- 性别:
- 来自: 杭州
最新评论
xml的解析一般分为两种方式,一种是SAX事件流的方式,另外一种是基于DOM的xml文档树结构解析,SAX是一边解析一边加载,而DOM需要一次性将XML文件全部加载到内存中,再解析构建成文档数的模式。
首先看一下基于DOM的XML解析和创建。
案例xml内容:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<employees>
<employee>
<name>ddviplinux</name>
<sex>m</sex>
<parents>
<father>xxx</father>
<mother>yyy</mother>
</parents>
</employee>
</employees>
1.首先定一个方法接口:
里面包含了创建和解析的方法定义。
2.实现这个接口:
从上面的实现方法中,我们可以看出来,不管是在解析或者是生成的时候,首先都需要或许到一个documentbuilder,而这里面用到了一个工厂方法,直接获取:
首先看一下基于DOM的XML解析和创建。
案例xml内容:
引用
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<employees>
<employee>
<name>ddviplinux</name>
<sex>m</sex>
<parents>
<father>xxx</father>
<mother>yyy</mother>
</parents>
</employee>
</employees>
1.首先定一个方法接口:
import org.w3c.dom.Document; public interface XmlDocument { public void createDocument(String fileName); public void parserDocument(String fileName); }
里面包含了创建和解析的方法定义。
2.实现这个接口:
import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.PrintWriter; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerConfigurationException; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; 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.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import com.ailk.xmlparserdemon.intf.XmlDocument; public class DomXmlDemon implements XmlDocument { Document document; static String fileName; public void init(){ try { DocumentBuilderFactory builderFactory=DocumentBuilderFactory.newInstance(); DocumentBuilder builder=builderFactory.newDocumentBuilder(); [b] this.document=builder.newDocument();[/b] } catch (ParserConfigurationException e) { e.printStackTrace(); } } /** * DOM方式生成xml文件 */ public void createDocument(String fileName) { Element root=this.document.createElement("employees"); this.document.appendChild(root); Element employee=this.document.createElement("employee"); Element name=this.document.createElement("name"); name.appendChild(this.document.createTextNode("ddviplinux")); employee.appendChild(name); Element sex=this.document.createElement("sex"); sex.appendChild(this.document.createTextNode("m")); employee.appendChild(sex); Element parents=this.document.createElement("parents"); Element father=this.document.createElement("father"); father.appendChild(this.document.createTextNode("xxx")); parents.appendChild(father); Element mother=this.document.createElement("mother"); mother.appendChild(this.document.createTextNode("yyy")); parents.appendChild(mother); employee.appendChild(parents); root.appendChild(employee); try { DOMSource source=new DOMSource(this.document); TransformerFactory tf=TransformerFactory.newInstance(); Transformer transf=tf.newTransformer(); transf.setOutputProperty(OutputKeys.ENCODING, "UTF-8");//设置编码格式 transf.setOutputProperty(OutputKeys.INDENT, "yes");//设置是否在格式化时添加多于的空格 PrintWriter pw=new PrintWriter(new FileOutputStream(fileName)); StreamResult result=new StreamResult(pw); transf.transform(source, result); System.out.println("生成文件成功:"+fileName); } catch (TransformerConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerFactoryConfigurationError e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (TransformerException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public void parserDocument(String fileName) { try { DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=dbf.newDocumentBuilder(); [b] Document document=db.parse(fileName);[/b] NodeList employees=document.getChildNodes(); for(int i=0;i<employees.getLength();i++){ Node employee=employees.item(i); NodeList employeeInfo=employee.getChildNodes(); for(int j=0;j<employeeInfo.getLength();j++){ Node node=employeeInfo.item(j); NodeList employeeMeta=node.getChildNodes(); for(int k=0;k<employeeMeta.getLength();k++){ System.out.println(employeeMeta.item(k).getNodeName()+" : "+employeeMeta.item(k).getTextContent()); } } } System.out.println("解析完毕!"); } catch (ParserConfigurationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (SAXException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public static void main(String[] args){ DomXmlDemon dom=new DomXmlDemon(); DomXmlDemon.fileName="E:\\OneNote\\dom.xml"; dom.init(); dom.createDocument(fileName); dom.parserDocument(fileName); } }
从上面的实现方法中,我们可以看出来,不管是在解析或者是生成的时候,首先都需要或许到一个documentbuilder,而这里面用到了一个工厂方法,直接获取:
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance(); DocumentBuilder db=dbf.newDocumentBuilder();
发表评论
-
开发工具备忘
2014-06-19 23:41 3821.谷歌公司的:guava; 2.apache公司的:Co ... -
java.util.date
2014-06-17 21:58 382<div class="iteye-blo ... -
(转) spring 的jar各包作用
2014-06-01 15:03 466转自:http://blog.csdn.net/c ... -
(转)Hibernate 的jar各包作用
2014-06-01 15:02 354转自:http://blog.csdn.net/cailian ... -
(转)CyclicBarrier介绍
2014-05-28 08:17 504转自:http://www.iteye.com/topic/9 ... -
(转)Callable,Runnable比较及用法
2014-05-27 13:53 534转自:http://murielily.blog. ... -
(转)java Future 接口介绍
2014-05-27 13:52 480转自:http://blog.csdn.net/yangyan ... -
9_(JAVA基础300集最全教程 学习)自动装箱和拆箱
2014-05-16 00:08 594在JDK5.0中新增了自动装箱和拆箱,为开发人员解决了很多 ... -
8_(JAVA基础300集最全教程 学习)Collectioin各容器实现方式
2014-05-15 23:01 3741.ArrayList : 实现方式(非可序化Object数组 ... -
(转)java关键字Transient
2014-05-15 22:52 422转自:http://horst.sun.blog.163.co ... -
(转)Java使用JDBC连接Oracle_MSSQL实例
2014-05-14 23:20 487转自:http://blog.csdn.net/tungkee ... -
ant入门
2014-05-14 23:07 507这几天忙着看项目中的 ... -
(备忘)java.lang.Class类
2014-05-10 21:48 411转自:http://lavasoft.blog.51cto.c ... -
(备忘)native2ascii转码工具使用
2014-05-10 21:49 395native2ascii简介:native2ascii是sun ... -
(转)java.lang.Object类
2014-05-10 21:49 1671转自:http://lavasoft.blog.51cto.c ... -
(备忘录)xml文件的生成和解析_JDOM_4
2014-05-09 14:45 449import java.io.FileNotFou ... -
(备忘录)xml文件的生成和解析_DOM4J_3
2014-05-09 13:58 354import java.io.File; import ... -
(备忘录)xml文件的生成和解析_SAX_2
2014-05-09 11:51 460一边加载一边解析,速度快,内存占用小,但是如果再次使用时需要再 ... -
(转)J2EE十三个规范
2014-05-09 09:48 406转自:http://www.ibm.com/developer ... -
7_(JAVA基础300集最全教程 学习)方法重载overload
2014-05-08 22:23 460方法重载指的是同样一个方法的多种实现方式,例如我有个加法计算方 ...
相关推荐
总结,基于XML的简易联系人备忘录利用了XML的灵活性和可扩展性,实现了数据的存储和管理。虽然没有数据库的支持,但依然能够满足基本的记录和检索功能,为学习XML提供了一个直观的应用实例。在实际开发中,需要根据...
在数据管理方面,小程序通常使用微信小程序的本地存储API,如`wx.setStorageSync`和`wx.getStorageSync`,来实现对备忘录的添加、删除、修改和查询操作。这些API允许开发者在小程序的本地存储空间中保存和读取键值对...
1. **用户界面设计**:从项目中包含的图片资源(如1_120916130147_1.png和1_120916130147_2.png)可以推测,该备忘录应用可能采用了常见的UI布局,包括添加、编辑和删除备忘录的界面。通常,开发者会使用XML布局文件...
微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小...
1. **MainActivity.java** - 主Activity文件,包含备忘录列表的显示和事件监听。 2. **EditActivity.java** - 编辑备忘录的Activity,用户可以输入新备忘录或者修改已有的。 3. **DatabaseHelper.java** - SQLite...
微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习...
【标题】:“桌面备忘录(可放在桌面的备忘录)”是一款便捷的桌面工具,旨在帮助用户轻松记录日常生活和工作中的重要事项。这款备忘录软件设计精巧,可以直接放置在桌面上,便于随时查看和编辑,提高了工作效率与...
小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+...
对于备忘录的存储,我们可以选择数据库(如SQLite)、文本文件或XML文件等方式。如果使用数据库,MFC提供了CDatabase和CRecordset类来操作数据库。如果使用文件,可以利用fstream进行读写操作。每条备忘录作为一个...
在备忘录应用中,可能需要创建自定义的布局文件来展示备忘录列表和详情。 8. **代码生成目录**:`gen`目录下存放由ADT(Android Development Toolkit)自动生成的Java源代码,通常是R.java文件,包含了应用的所有...
微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源...
设计和实现一个类似个人备忘录的 Android APP ,数据库采用 SQLite (也可以直接访问 Web 端 MySQL 数据库、或提供 Web 接口访问 MySQL 数据库)。 1.用户注册和登录(这类 APP 一般面对个人,用户不需要分类别); ...
在本项目中,"日历备忘录Java源码" 提供了一套完整的日历应用程序的源代码,主要由四个核心文件组成:NotePad.java、CalendarPad.java、Month.java 和 Year.java。这些文件分别代表了备忘录、日历、月份和年份的功能...
另外,备忘录的记录和删除可能需要ListView或RecyclerView来展示,每个条目包含一个TextView用于显示文本内容,以及一个Button用于删除操作。 3. **活动(Activity)**:在Android中,Activity代表了应用的一个屏幕...
开发者可能会使用Android Studio中的布局编辑器设计XML布局文件,定义UI组件,如EditText(用于输入文本)、ListView或RecyclerView(用于展示备忘录列表)以及Button(用于执行操作)。 在数据存储方面,Android...
8. **文件上传与下载**:记事簿和备忘录可能支持附件上传,这需要后端处理文件上传的逻辑,可能涉及到文件的存储路径管理、文件流操作等。 9. **数据持久化**:除了使用数据库存储数据外,系统可能还使用了ORM...
1. **AndroidManifest.xml**: 这是每个Android应用的核心配置文件,用于声明应用的组件(Activity、Service等)、权限、Intent过滤器等。在备忘录应用中,可能会声明主Activity和可能存在的其他辅助Activity。 2. *...
- **发布准备**:生成APK文件,进行签名和优化,准备上传至Google Play或其他应用市场。 在开发“我的备忘录”这样的应用时,开发者需要熟练掌握上述知识点,并根据实际需求进行功能定制和用户体验优化。此外,随着...
1. **界面布局**:检查XML布局文件,理解界面元素的排列和交互设计。 2. **数据管理**:查看数据库操作,了解如何使用SQLite或Room数据库存储备忘录内容。 3. **多媒体支持**:研究如何处理和展示多媒体文件,可能...
读取完成后,将字符串解析回备忘录对象,显示在界面上。 5. **文件操作**: - 在进行文件操作时,需要处理异常,如`IOException`,确保数据安全。同时,为了防止数据丢失,应该在写操作时使用`try-with-resources`...