`

(备忘录)xml文件的生成和解析_DOM_1

阅读更多
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.首先定一个方法接口:
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();







分享到:
评论

相关推荐

    基于XML的简易联系人备忘录

    总结,基于XML的简易联系人备忘录利用了XML的灵活性和可扩展性,实现了数据的存储和管理。虽然没有数据库的支持,但依然能够满足基本的记录和检索功能,为学习XML提供了一个直观的应用实例。在实际开发中,需要根据...

    备忘录_备忘录_微信小程序_wherevermpo_

    在数据管理方面,小程序通常使用微信小程序的本地存储API,如`wx.setStorageSync`和`wx.getStorageSync`,来实现对备忘录的添加、删除、修改和查询操作。这些API允许开发者在小程序的本地存储空间中保存和读取键值对...

    Android 备忘录源码.rar

    1. **用户界面设计**:从项目中包含的图片资源(如1_120916130147_1.png和1_120916130147_2.png)可以推测,该备忘录应用可能采用了常见的UI布局,包括添加、编辑和删除备忘录的界面。通常,开发者会使用XML布局文件...

    微信小程序 备忘录 (源码)

    微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小程序 备忘录 (源码)微信小...

    Android课程设计--便捷备忘录

    1. **MainActivity.java** - 主Activity文件,包含备忘录列表的显示和事件监听。 2. **EditActivity.java** - 编辑备忘录的Activity,用户可以输入新备忘录或者修改已有的。 3. **DatabaseHelper.java** - SQLite...

    桌面备忘录(可放在桌面的备忘录)

    【标题】:“桌面备忘录(可放在桌面的备忘录)”是一款便捷的桌面工具,旨在帮助用户轻松记录日常生活和工作中的重要事项。这款备忘录软件设计精巧,可以直接放置在桌面上,便于随时查看和编辑,提高了工作效率与...

    微信小程序源码 备忘录(学习版)

    微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习版)微信小程序源码 备忘录(学习...

    小程序源码 备忘录 (代码+截图)

    小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+截图)小程序源码 备忘录 (代码+...

    BWL_MFCc++备忘录系统_

    对于备忘录的存储,我们可以选择数据库(如SQLite)、文本文件或XML文件等方式。如果使用数据库,MFC提供了CDatabase和CRecordset类来操作数据库。如果使用文件,可以利用fstream进行读写操作。每条备忘录作为一个...

    android备忘录app源码.zip

    【Android备忘录App源码解析】 Android备忘录App是移动设备上常见的应用程序,用于帮助用户记录日常生活、工作中的重要事项。这份源码“EverMemo-master”提供了一个完整的Android备忘录应用的实现,是深入理解...

    android备忘录实现

    在备忘录应用中,可能需要创建自定义的布局文件来展示备忘录列表和详情。 8. **代码生成目录**:`gen`目录下存放由ADT(Android Development Toolkit)自动生成的Java源代码,通常是R.java文件,包含了应用的所有...

    微信小程序 小工具类 备忘录 (源代码+截图)

    微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源代码+截图)微信小程序 小工具类 备忘录 (源...

    Android开发备忘录

    设计和实现一个类似个人备忘录的 Android APP ,数据库采用 SQLite (也可以直接访问 Web 端 MySQL 数据库、或提供 Web 接口访问 MySQL 数据库)。 1.用户注册和登录(这类 APP 一般面对个人,用户不需要分类别); ...

    日历备忘录Java源码

    在本项目中,"日历备忘录Java源码" 提供了一套完整的日历应用程序的源代码,主要由四个核心文件组成:NotePad.java、CalendarPad.java、Month.java 和 Year.java。这些文件分别代表了备忘录、日历、月份和年份的功能...

    android studio 简单备忘录

    另外,备忘录的记录和删除可能需要ListView或RecyclerView来展示,每个条目包含一个TextView用于显示文本内容,以及一个Button用于删除操作。 3. **活动(Activity)**:在Android中,Activity代表了应用的一个屏幕...

    Android源码——备忘录源码.zip

    开发者可能会使用Android Studio中的布局编辑器设计XML布局文件,定义UI组件,如EditText(用于输入文本)、ListView或RecyclerView(用于展示备忘录列表)以及Button(用于执行操作)。 在数据存储方面,Android...

    java记事簿管理系统_备忘录管理系统_通讯录_记账本-源码+数据库+论文or文档.zip

    8. **文件上传与下载**:记事簿和备忘录可能支持附件上传,这需要后端处理文件上传的逻辑,可能涉及到文件的存储路径管理、文件流操作等。 9. **数据持久化**:除了使用数据库存储数据外,系统可能还使用了ORM...

    用android studio写的一个备忘录

    - **发布准备**:生成APK文件,进行签名和优化,准备上传至Google Play或其他应用市场。 在开发“我的备忘录”这样的应用时,开发者需要熟练掌握上述知识点,并根据实际需求进行功能定制和用户体验优化。此外,随着...

    Android程序研发源码Android 备忘录源码.zip

    1. **AndroidManifest.xml**: 这是每个Android应用的核心配置文件,用于声明应用的组件(Activity、Service等)、权限、Intent过滤器等。在备忘录应用中,可能会声明主Activity和可能存在的其他辅助Activity。 2. *...

    安卓备忘录源码zip格式

    1. **界面布局**:检查XML布局文件,理解界面元素的排列和交互设计。 2. **数据管理**:查看数据库操作,了解如何使用SQLite或Room数据库存储备忘录内容。 3. **多媒体支持**:研究如何处理和展示多媒体文件,可能...

Global site tag (gtag.js) - Google Analytics