zoukankan      html  css  js  c++  java
  • 初学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

     1 import java.io.File;
     2 
     3 import javax.xml.parsers.DocumentBuilder;
     4 import javax.xml.parsers.DocumentBuilderFactory;
     5 
     6 import org.w3c.dom.*;
     7 
     8 
     9 public class XMLUtil {
    10     //初始化手机内存的信息,传入的值全都在config.xml文件中
    11     public static void initPhone(){
    12         try{
    13             //创建DOM文档对象
    14             DocumentBuilderFactory dFactory = DocumentBuilderFactory.newInstance();
    15             DocumentBuilder builder = dFactory.newDocumentBuilder();
    16             Document doc = builder.parse(new File("config.xml"));
    17             
    18             //获取包含类的节点
    19             NodeList nl = doc.getElementsByTagName("address");
    20             for(int i=0 ; i<nl.getLength() ; i++){
    21                 Element element = (Element)nl.item(i);
    22                 Address address = new Address();
    23                 NodeList childNodes = element.getElementsByTagName("val");
    24                 address.setMsg(childNodes.item(0).getFirstChild().getNodeValue());
    25                 Phone.addAddress(address);
    26             }
    27             
    28             nl = doc.getElementsByTagName("note");
    29             for(int i=0 ; i<nl.getLength() ; i++){
    30                 Element element = (Element)nl.item(i);
    31                 Note note = new Note();
    32                 NodeList childNodes = element.getElementsByTagName("val");
    33                 note.setMsg(childNodes.item(0).getFirstChild().getNodeValue());
    34                 Phone.addNote(note);
    35             }
    36             
    37             nl = doc.getElementsByTagName("photo");
    38             for(int i=0 ; i<nl.getLength() ; i++){
    39                 Element element = (Element)nl.item(i);
    40                 Photo photo = new Photo();
    41                 NodeList childNodes = element.getElementsByTagName("val");
    42                 photo.setMsg(childNodes.item(0).getFirstChild().getNodeValue());
    43                 Phone.addPhoto(photo);
    44             }
    45             
    46             nl = doc.getElementsByTagName("music");
    47             for(int i=0 ; i<nl.getLength() ; i++){
    48                 Element element = (Element)nl.item(i);
    49                 Music music = new Music();
    50                 NodeList childNodes = element.getElementsByTagName("val");
    51                 music.setMsg(childNodes.item(0).getFirstChild().getNodeValue());
    52                 Phone.addMusic(music);
    53             }
    54         }catch(Exception e){
    55             e.printStackTrace();
    56         }
    57     }
    58     public static void main(String [] args){
    59         initPhone();
    60         Phone.show();
    61     }
    62 }

    剩下有兴趣可以在这得到源代码:http://pan.baidu.com/s/1pJZlLB9

  • 相关阅读:
    绝对路径相对路径
    LN项目重构之职责链模式
    年度回忆录(2011.072011.12)
    协议学习建议
    UBUNTU下制作软盘映
    从汇编看c语言函数调用
    计算机底层入门知识杂记(一)——计算机启动流程解析
    自己动手写操作体统 pmtest1.asm 详细解释
    汇编函数与C函数的相互调用
    嵌入式linux驱动开发班
  • 原文地址:https://www.cnblogs.com/CSU3901130321/p/5077254.html
Copyright © 2011-2022 走看看