初学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文件标签值难免会产生个别错误造成程序无法跑 ...
随机推荐
- 关于为busybox设置setuid
安卓root了,重启之后就没root权限了,于是想到了为 busybox 设置 setuid 来实现使用root的身份执行命令. 可是,不管用啊,还是提示没有权限.搜了一下 busybox setui ...
- delphi的webBrowser操作HTML研究
测试例子: 外网电脑D:\TEST\delphiTest\webbrowsetest 参考文档: delphi 操作WebBrowser 元素值 http://hi.baidu.com/kinglik ...
- Signalr简单例子
一.需要引用的 Js: 二.编码 用的是signalr2,需要新建Startup.cs类,编码如下: using Microsoft.Owin; using Owin; using System; u ...
- InnoDB Spin rounds per wait在>32位机器上可能为负
今天发现一个系统innodb的spin rounds per wait为负,感觉很奇怪,原来是个bug: For example (output from PS but we have no patc ...
- 谈谈JDK线程的伪唤醒
在JDK的官方的wait()方法的注释中明确表示线程可能被"虚假唤醒",JDK也明确推荐使用while来判断状态信息.那么这种情况的发生的可能性有多大呢? 使用生产者消费者模型来说 ...
- CI 框架访问 http://[::1]/yourproject/
Chances are you have left the base url blank/* |---------------------------------------------------- ...
- 使用Lombok简化你的代码
一.安装 eclipse 下载:https://projectlombok.org/ 双击安装即可. 重启eclipse/myeclipse 如果有报错,clean一下项目 ...
- PowerDeigner 一个很好的画uml 和建模的软件
pd: http://pan.baidu.com/s/1o6qpCT0
- python操作数据库产生中文乱码问题【已解决】
记:最近在使用python进行学生成绩管理系统设计时,遇到了一个中文显示的问题,这个问题困扰了一个上午,查阅了有关资料,锁定了原因——编码问题.最终更改编码设置,问题得到了解决. 具体做法: 1 Py ...
- max-width实现图片的自适应
在自适应布局中,有时候会让图片随着宽度的变化相应的放大或者缩小,或者说让图片等比缩放,但是每个图片的大小又不一样,这个时候我们就要用到max-width这个属性了. img{ max-width:10 ...