初学DOM树解析xml文件
做了一次设计模式实验的题目:
某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录、短信、照片、歌曲等资料一次性全部拷贝到移动存储介质(例如MMC卡或SD卡)中。在实现过程中需要与多个已有的类进行交互,例如通讯录管理类、短信管理类等,为了降低系统的耦合度,试使用外观模式来设计并编程模拟实现该一键备份功能。
我自己在这道题目中构建了MMC,SD继承了abstract class的AbstractCard类,这样方便以后继续增加外接卡
对于通信录、短信、照片、歌曲四个属性我也都有各自的类并只给了msg作为对应文件的文件名,然后将初始手机内拥有的文件信息用config配置
<?xml version="1.0" encoding="UTF-8"?>
<config>
<address>
<val>Jack</val>
</address>
<address>
<val>Mike</val>
</address>
<note>
<val>care for raining!</val>
</note>
<photo>
<val>tiger</val>
</photo>
<photo>
<val>cat</val>
</photo>
<music>
<val>complicated-Avril</val>
</music>
</config>
config.xml
然后自己就是要解析这个xml放入手机Phone类中保存,然后在实施一键复制
这里主要是为了学习xml解析,顺便贴了自己写整道题目的代码:xmlDOM解析学习的网站
解析就时在XMLUtil.java代码中,这里有个测试的main得到结果:
这是Phone内存中的文件:
下方显示通讯录信息:
Jack
Mike
下方显示短信信息:
care for raining!
下方显示照片信息:
tiger
cat
下方显示歌曲信息:
complicated-Avril
import java.io.File; import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory; import org.w3c.dom.*; public class XMLUtil {
//初始化手机内存的信息,传入的值全都在config.xml文件中
public static void initPhone(){
try{
//创建DOM文档对象
DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = dFactory.newDocumentBuilder();
Document doc = builder.parse(new File("config.xml")); //获取包含类的节点
NodeList nl = doc.getElementsByTagName("address");
for(int i=0 ; i<nl.getLength() ; i++){
Element element = (Element)nl.item(i);
Address address = new Address();
NodeList childNodes = element.getElementsByTagName("val");
address.setMsg(childNodes.item(0).getFirstChild().getNodeValue());
Phone.addAddress(address);
} nl = doc.getElementsByTagName("note");
for(int i=0 ; i<nl.getLength() ; i++){
Element element = (Element)nl.item(i);
Note note = new Note();
NodeList childNodes = element.getElementsByTagName("val");
note.setMsg(childNodes.item(0).getFirstChild().getNodeValue());
Phone.addNote(note);
} nl = doc.getElementsByTagName("photo");
for(int i=0 ; i<nl.getLength() ; i++){
Element element = (Element)nl.item(i);
Photo photo = new Photo();
NodeList childNodes = element.getElementsByTagName("val");
photo.setMsg(childNodes.item(0).getFirstChild().getNodeValue());
Phone.addPhoto(photo);
} nl = doc.getElementsByTagName("music");
for(int i=0 ; i<nl.getLength() ; i++){
Element element = (Element)nl.item(i);
Music music = new Music();
NodeList childNodes = element.getElementsByTagName("val");
music.setMsg(childNodes.item(0).getFirstChild().getNodeValue());
Phone.addMusic(music);
}
}catch(Exception e){
e.printStackTrace();
}
}
public static void main(String [] args){
initPhone();
Phone.show();
}
}
剩下有兴趣可以在这得到源代码:http://pan.baidu.com/s/1pJZlLB9
初学DOM树解析xml文件的更多相关文章
- 用JAXP的dom方式解析XML文件
用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...
- 在iOS 开发中用GDataXML(DOM方式)解析xml文件
因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我 ...
- Java-Web DOM方式解析xml文件
XML DOM 树形结构: DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 元素是一个元素节点 包含在 XML 元素中 ...
- XML:使用DOM技术解析xML文件中的城市,实现select级联选择
中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...
- Java&Xml教程(二)使用DOM方式解析XML文件
DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...
- DOM方式解析XML文件实例
books.XML文件: <?xml version="1.0" encoding="utf-8"?><bookstore> &l ...
- dom方式解析xml文件的步骤
使用java类即可
- Java解析XML文件的方式
在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...
- 【TensorFlow】Python解析xml文件
最近在项目中使用TensorFlow训练目标检测模型,在制作自己的数据集时使用了labelimg软件对图片进行标注,产生了VOC格式的数据,但标注生成的xml文件标签值难免会产生个别错误造成程序无法跑 ...
随机推荐
- Thinking in UML-2-建模基础
建模的问题可以分为两个: 怎么建 模是什么 怎么建:角度不同决定了建模方向不同.所以首先要决定抽象的角度即建立这个模型的目的是什么. 模是什么:人+事+物+规则 我们这样来建立模型: 问题领域 = n ...
- linux命令-sftp(模拟ftp服务)和scp(文件异地直接复制)
1)sftp sftp是模拟ftp的服务,使用22端口 针对远方服务器主机 (Server) 之行为 变换目录到 /etc/test 或其他目录 cd /etc/testcd PATH 列出目前所在目 ...
- C# property简介
property专属的关键字就只有value.其他的性质实现都是用其他的方法的组合.property通过对一系列方法的灵活组合应用,能够间接地对私有的成员变量进行赋值操作和得到值.因为是间接地,私有变 ...
- Linux 的字符串截取方法(转)
Linux 的字符串截取很有用.有八种方法. 假设有变量 var=http://www.aaa.com/123.htm. 1. # 号截取,删除左边字符,保留右边字符. echo ${var#*//} ...
- XML标签
SQL标签库提供了创建和操作XML文档的标签. 引入语法:<%@ taglib prefix="x" uri="http://java.sun.com/jsp/js ...
- [转] GitHub上README.md教程
点击阅读原文 最近对它的README.md文件颇为感兴趣.便写下这贴,帮助更多的还不会编写README文件的同学们. README文件后缀名为md.md是markdown的缩写,markdown是一种 ...
- 结合Apache和Tomcat实现集群和负载均衡 JK 方式
本文基本参考自 轻松实现Apache,Tomcat集群和负载均衡,经由实操经历记录而成,碰到些出入,以及个别地方依据个人的习惯,所以在一定程度上未能保持原文的完整性,还望原著者海涵. 因原文中有较多的 ...
- Java虚拟机学习(4):对象内存分配与回收
对象优先在Eden上分配 大多数情况下,对象优先在新生代Eden区域中分配.当Eden内存区域没有足够的空间进行分配时,虚拟机将触发一次 Minor GC(新生代GC).Minor GC期间虚拟机将E ...
- Web Performance Test : IP切换/IP欺骗
译者前言 本文翻译自<Visual Studio Performance Testing Quick Reference Guide 3.6> 有关于IP Switching的章节.< ...
- RCP:如何移除Search对话框中不需要的项
前言 很久没写文章了,准备写一系列关于Eclipse RCP /Plugin的文章. 这些文章都是trouble shooting性质的,不准备写的很细,当你碰到这样的问题,google到时,能帮你把 ...