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

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

    MVC 3 异步编程好麻烦,需要使用异步控制器,一个Action需要拆成两个,很不方便.MVC3的好处是,只需要.NET Framework 4.0就能运行 MVC 4 之后只需要使用async和aw ...

  2. c3p0数据库连接池使用

  3. LINQ to SQL:Where、Select/Distinct

    Where 操作 适用场景:实现过滤,查询等功能. 简单说明:与 SQL 命令中的 Where 作用相似,都是起到范围限定也就是过滤作用的 ,而判断条件就是它后面所接的子句. Where 操作包括 3 ...

  4. cargo failed to finish deploying within the timeout period [120000]

    cargo插件,报错:failed to finish deploying within the timeout period [120000] 解决方法:配置timeout为0 <plugin ...

  5. CI 框架访问 http://[::1]/yourproject/

    Chances are you have left the base url blank/* |---------------------------------------------------- ...

  6. php浏览历史记录

    /** * 商品历史浏览记录 * $data 商品记录信息 */ private function _history($data) { if(!$data || !is_array($data)) { ...

  7. EntityFramework Core 学习笔记 —— 包含与排除属性

    原文地址:https://docs.efproject.net/en/latest/modeling/included-properties.html 在模型中包含一个属性意味着 EF 拥有了这个属性 ...

  8. [问题2014S12] 解答

    [问题2014S12]  解答 先证明一个简单的引理. 引理  设 \(B\) 为 \(n\) 阶半正定 Hermite 阵, \(\alpha\) 为 \(n\) 维复列向量, 若 \(\overl ...

  9. VS2013: upgrading a Windows Phone 7/8 and Windows 8 apps(转)

    VS2013: upgrading a Windows Phone 7/8 and Windows 8 apps September 17, 2013Windows 8, Windows PhoneJ ...

  10. 下载SRA文件

    sratoolkit.2.6.2-centos_linux64/bin/prefetch  下载SRA文件 fastq-dump    --split-3    SRR2923014.sra    转 ...