做了一次设计模式实验的题目:

某软件公司为新开发的智能手机控制与管理软件提供了一键备份功能,通过该功能可以将原本存储在手机中的通信录、短信、照片、歌曲等资料一次性全部拷贝到移动存储介质(例如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文件的更多相关文章

  1. 用JAXP的dom方式解析XML文件

    用JAXP的dom方式解析XML文件,实现增删改查操作 dom方式解析XML原理 XML文件 <?xml version="1.0" encoding="UTF-8 ...

  2. 在iOS 开发中用GDataXML(DOM方式)解析xml文件

    因为GDataXML的内部实现是通过DOM方式解析的,而在iOS 开发中用DOM方式解析xml文件,这个时候我们需要开启DOM,因为ios 开发中是不会自动开启的,只有在mac 开发中才自动开启的.我 ...

  3. Java-Web DOM方式解析xml文件

    XML DOM 树形结构: DOM 节点 根据 DOM,XML 文档中的每个成分都是一个节点. DOM 是这样规定的: 整个文档是一个文档节点 每个 XML 元素是一个元素节点 包含在 XML 元素中 ...

  4. XML:使用DOM技术解析xML文件中的城市,实现select级联选择

    中国的城市xml格式:cities.xml <?xml version="1.0" encoding="utf-8"?> <china> ...

  5. Java&Xml教程(二)使用DOM方式解析XML文件

    DOM XML 解析方式是最容易理解的,它將XML文件作为Document对象读取到内存中,然后你可以轻松地遍历不同的元素和节点对象.遍历元素和节点不需要按照顺序进行. DOM解析方式适合尺寸较小的X ...

  6. DOM方式解析XML文件实例

    books.XML文件: <?xml version="1.0" encoding="utf-8"?><bookstore>    &l ...

  7. dom方式解析xml文件的步骤

    使用java类即可

  8. Java解析XML文件的方式

    在项目里,我们往往会把一些配置信息放到xml文件里,或者各部门间会通过xml文件来交换业务数据,所以有时候我们会遇到“解析xml文件”的需求.一般来讲,有基于DOM树和SAX的两种解析xml文件的方式 ...

  9. 【TensorFlow】Python解析xml文件

    最近在项目中使用TensorFlow训练目标检测模型,在制作自己的数据集时使用了labelimg软件对图片进行标注,产生了VOC格式的数据,但标注生成的xml文件标签值难免会产生个别错误造成程序无法跑 ...

随机推荐

  1. cvc-complex-type.2.4.c: The matching wildcard is strict, but no declaration can be found for element ‘dubbo:application’. – schema_reference.4: Failed to read schema document

    解决办法: 1.直接百度下载一个dubbo.xsd文件 2.myeclispe-->window-->preferences-->xml catalog-->add 完美解决!

  2. XAF去掉View页面的编辑器

    如图,去掉该编辑器功能. 1.detailView   protected override void OnActivated()        {            base.OnActivat ...

  3. Python之反射

    一.引言 有时候我们会碰到类似这样的需求,就是想要执行类的某个方法,或者需要对对象的某个参数赋值,而方法名或参数名已经包装在类中并不能去顶,需要通过参数传递字符串的形式输入.在这样的情况你会选择什么样 ...

  4. 搭建自己本地yum源

    1.挂载系统光盘(注:medi下的cdrom是我自己创建的,可以挂载在任意目录) [root@liutao ~]# mount /dev/cdrom /media/cdrom/ 2.修改yum配置文件 ...

  5. 如何从github上面拷贝源码

    有好奇心的朋友们一定都想看一看很多开源项目的源码,那么github就不用说啦,太多的开源项目都把源码放到上面. 博主最近为了学习angularjs也不得不去github上面弄源码,下面将会介绍如何做: ...

  6. [问题2015S06] 复旦高等代数 II(14级)每周一题(第七教学周)

    [问题2015S06]  设 \(V\) 是数域 \(\mathbb{K}\) 上的 \(n\) 维线性空间, \(\varphi\) 是 \(V\) 上的线性变换. (1) 求证: 对任一非零向量 ...

  7. Zabbix 3.0.3 SQL Injection

    Zabbix version 3.0.3 suffers from a remote SQL injection vulnerability. ============================ ...

  8. hihoCoder 1385 : A Simple Job(简单工作)

    hihoCoder #1385 : A Simple Job(简单工作) 时间限制:1000ms 单点时限:1000ms 内存限制:256MB Description - 题目描述 Institute ...

  9. BZOJ 3229: [Sdoi2008]石子合并

    3229: [Sdoi2008]石子合并 时间限制: 3 Sec  内存限制: 128 MB提交: 497  解决: 240[提交][][] 题目描述 在一个操场上摆放着一排N堆石子.现要将石子有次序 ...

  10. laravel多国语言包

    https://packagist.org/packages/caouecs/laravel-lang 例如安装中文语言包 则下载 zh-CN 拷贝文件到 resouces/lang 下 然后修改co ...