---恢复内容开始---

 import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List; import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter; public class Dom4jDemo2 {
private Document document; // 获得document对象
public void loadDocument() {
SAXReader saxReader = new SAXReader(); //相当于一个解析器
try {
document = saxReader.read(new File("newInfo.xml")); //解析获得document对象
} catch (DocumentException e) {
e.printStackTrace();
}
} // 显示手机的品牌及型号
public void showPhoneInfo() {
// 获取XML根节点
Element root = document.getRootElement();
// 获取所有<Brand>
Iterator eleBrands = root.elementIterator();
while (eleBrands.hasNext()) {
Element brand = (Element) eleBrands.next();
System.out.println(brand.attributeValue("name"));
//获取所有的<Type>
Iterator eleTypes = brand.elementIterator();
while (eleTypes.hasNext()) {
Element type = (Element) eleTypes.next();
System.out.println("\t" + type.attributeValue("name"));
}
}
} /**
* 把xml里手机品牌及型号放入集合里输出
* @return
*/
public List<Brand> queryBrand(){
//获取XML根节点
Element root = document.getRootElement(); List<Element> brands=root.elements();
List<Brand> outBrands=new ArrayList<Brand>();
for (Element eleBrand : brands) {
Brand b=new Brand();
b.setName(eleBrand.attribute("name").getValue());
b.setId(Integer.parseInt(eleBrand.attribute("id").getValue())); List<String> types=new ArrayList<String>();
List<Element> eleTypes=eleBrand.elements();
for(Element elType:eleTypes) {
types.add(elType.attribute("name").getValue());
}
b.setTypes(types); outBrands.add(b);
} return outBrands;
} /**
* 把集合内容写入XML里
*/
public boolean saveBrand(List<Brand> brandList) {
SAXReader reader=new SAXReader();
document=reader.getDocumentFactory().createDocument(); //创建一个新的xml文档
Element root=document.addElement("PhoneInfo"); //新增根元素<PhoneInfo>
for (Brand brand : brandList) {
Element eleBrand=root.addElement("Brand");
eleBrand.addAttribute("name", brand.getName());
eleBrand.addAttribute("id", brand.getId()+"");
for(String type:brand.getTypes()) {
Element eleTypes=eleBrand.addElement("Type");
eleTypes.addAttribute("name", type);
} } try {
XMLWriter writer=new XMLWriter(new FileOutputStream(new File("newInfo.xml")),OutputFormat.createPrettyPrint());
writer.write(document);
writer.close();
} catch (UnsupportedEncodingException | FileNotFoundException e) {
e.printStackTrace();
return false;
} catch (IOException e) {
e.printStackTrace();
return false;
}
return true;
} // 修改节点
public void updatePhone() {
Element root = document.getRootElement();
Iterator eleBrands = root.elementIterator();
int id = 0;
while (eleBrands.hasNext()) {
Element brand = (Element) eleBrands.next();
id++;
brand.addAttribute("id", id + "");
}
saveXML("newInfo.xml");
} // 增加新的手机品牌信息
public void addNewPhone() {
// 获得XML根元素
Element root = document.getRootElement();
// 创建<Brand name="三星">
Element elBrand = root.addElement("Brand");
elBrand.addAttribute("name", "三星");
// 创建<Type name="Note 9"/>
Element elType = elBrand.addElement("Type");
elType.addAttribute("name", "Note 9");
Element elType1 = elBrand.addElement("Type");
elType1.addAttribute("name", "S 10");
saveXML("newInfo.xml");
} // 保存修改到XML文件
public void saveXML(String path) {
OutputFormat format = OutputFormat.createPrettyPrint();
format.setEncoding("GBK");
XMLWriter writer = null;
try {
writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(path)), format);
writer.write(document);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
} // 删除节点
public void deletePhone() {
// 获取XML根节点
Element root = document.getRootElement();
// 获取所有<Brand>
Iterator eleBrands = root.elementIterator();
while (eleBrands.hasNext()) {
Element brand = (Element) eleBrands.next();
if(brand.attributeValue("name").equals("华为")) {
brand.getParent().remove(brand);
}
}
saveXML("newInfo.xml");
} public static void main(String[] args) {
Dom4jDemo2 domDemo = new Dom4jDemo2();
domDemo.loadDocument();
// domDemo.addNewPhone();
// domDemo.updatePhone();
// domDemo.deletePhone();
// domDemo.showPhoneInfo(); List<Brand> brandList=domDemo.queryBrand();
for (Brand brand : brandList) {
System.out.println(brand);
} /* List<String> typeList=new ArrayList<String>();
typeList.add("小米Mix 2");
typeList.add("小米Mix 3");
typeList.add("小米Mix 2S");
List<String> typeList2=new ArrayList<String>();
typeList2.add("Mate 20 S");
typeList2.add("Mate 20 Pro");
typeList2.add("Mate 20 ");
List<String> typeList3=new ArrayList<String>();
typeList3.add("iPhone XS");
typeList3.add("iPhone XS Max");
typeList3.add("iPhone XR ");
Brand b1=new Brand(01,"小米",typeList);
Brand b2=new Brand(02,"华为",typeList2);
Brand b3=new Brand(03,"苹果",typeList3);
List<Brand> brandList=new ArrayList<Brand>();
brandList.add(b1);
brandList.add(b2);
brandList.add(b3);
boolean c=domDemo.saveBrand(brandList);
System.out.println(c);*/
}
}
 import java.util.List;

 public class Brand {
private int id;
private String name;
private List<String>types; public Brand() {
} public Brand(int id, String name, List<String> types) {
this.id = id;
this.name = name;
this.types = types;
} public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<String> getTypes() {
return types;
}
public void setTypes(List<String> types) {
this.types = types;
}
@Override
public String toString() {
return this.name+this.types;
} }

---恢复内容结束---

Dom4jDemo应用-保存手机信息的更多相关文章

  1. Android_ 重写系统Crash处理类,保存Crash信息到SD卡 和 完美退出程序的方法

    转载时注明地址:http://blog.csdn.net/xiaanming/article/details/9344703 我们开发Android应用的时候,当出现Crash的时候,系统弹出一个警告 ...

  2. 使用 python 提取照片中的手机信息

    使用 python 提取照片中的手机信息 最近在做一个项目,有一个很重要的点是需要获取使用用户的手机信息,这里我选择从照片中获取信息.有人会问为什么不从手机里面直接获取设备信息.由于现在android ...

  3. day101:MoFang:模型构造器ModelSchema&注册功能之手机号唯一验证/保存用户注册信息/发送短信验证码

    目录 1.模型构造器:ModelSchema 1.SQLAlchemySchema 2.SQLAlchemyAutoSchema 2.注册功能基本实现 1.关于手机号码的唯一性验证 2.保存用户注册信 ...

  4. iOS 整理笔记 获取手机信息(UIDevice、NSBundle、NSLocale)

    /*    iOS的APP的应用开发的过程中,有时为了bug跟踪或者获取用反馈的需要自动收集用户设备.系统信息.应用信息等等,这些信息方便开发者诊断问题,当然这些信息是用户的非隐私信息,是通过开发ap ...

  5. 保存登录信息的Cookie加密技术

    所有需要账户登录的website 基本都会想到这样一个问题, 如何保持用户在一定时间内登录有效. 最近本人就在项目中遇到这样的需求,某些页面只能Admin账户登录后访问, 当登录Admin账户后如何才 ...

  6. 以下是关于ASP.NET中保存各种信息的对象的比较,理解这些对象的原理,对制作完善的程序来说是相当有必要的(摘至互联网,并非原创--xukunping)

    在ASP.NET中,有很多种保存信息的对象.例如:APPlication,Session,Cookie,ViewState和Cache等,那么它们有什么区别呢?每一种对象应用的环境是什么?    为了 ...

  7. 【风马一族_Android】Android 从命令行界面获取手机信息

    Android 从命令行界面获取手机信息 1: cmd 打开命令行界面 2:adb devices   获取与电脑相连的设备,例如:模拟器.真机(手机) (右击“标记”,选择设备名称,点击“Ctrl+ ...

  8. Android实战技巧之十九:android studio导出jar包(Module)并获得手机信息

    AS中并没有独立的Module 工程,可是能够在普通的Project中增加Module.所谓的Module就是我们通常所指的模块化的一个单元.并经常以jar包的形式存在.以下以一个获取手机信息的样例演 ...

  9. python+adb实现自动化获取手机信息

    首先我们先看一下使用adb查看Android手机信息的指令 #获取手机名称NAME = 'adb shell getprop ro.product.model'#获取手机版本VERSION = 'ad ...

随机推荐

  1. 【bzoj4310/hdu5030-跳蚤】后缀数组

    我真的是..调了一百年.. 傻逼的人生.. 而且这题好像可以用sam做哎!我Y出了一个奇怪的办法.. 好吧sam是不能做这题的.搞错了. 说说后缀数组好了.. 搞后缀数组 然后我们要二分一个子串,判断 ...

  2. centos6.4 nginx+mysql+php整合phpmyadmin出错解决方案

    今天在centos下整合phpmyadmin出错,错误提示如下: Error during session start; please check your PHP and/or webserver ...

  3. 愚蠢的LCAAAAA~~~~(>_<)~~~~

    很愤怒!特别愤怒!超级愤怒!!! 我LCA居然错了!!而且是那种特别愚蠢的错误 我把代码都交错了!!! silasila 话不多说,代码上特别详细了 #include<bits/stdc++.h ...

  4. (转)自动安装VIM插件

    转自: http://xwz.me/wiki/doku.php?id=vim:plugins 我的插件列表 把下面GetLatestVimScripts.dat放进~/.vim/GetLatest/目 ...

  5. shell整数加法

    http://blog.csdn.net/ll_0520/article/details/5959577 #plus #!/bin/sh let a=$1+$2 b=$[$1+$2] ((c=$1+$ ...

  6. 3.flume安装以及环境配置

    1.安装jdk 我这里已经安装过了,这里就不演示了 2.安装flume 安装cdh版本的,http://archive.cloudera.com/cdh5/cdh/5/ 安装完毕之后,配置环境变量. ...

  7. Log4Net的控制台,WinForm,WebApplication使用

    一.Log4Net的控制台,WinForm,WebApplication使用 1.首先使用nuget 添加log4Net 到控制台项目中 log4j每个符号的具体含义:%d %5p %c{1}:%L ...

  8. 深入理解Java的注解(Annotation):注解处理器(3)

    如果没有用来读取注解的方法和工作,那么注解也就不会比注释更有用处了.使用注解的过程中,很重要的一部分就是创建于使用注解处理器.Java SE5扩展了反射机制的API,以帮助程序员快速的构造自定义注解处 ...

  9. java 获取当前系统时间

    Java的Date获取时间函数都是deprecated 可以使用: https://stackoverflow.com/questions/5175728/how-to-get-the-current ...

  10. 关于oracle的sqlplus的另一些小技巧

    执行脚本的命令在上一节已经讲过,不再重复. sqlplus user/password@ip:port/servicename @/path/sqltest.sql; sqltest的内容及注释: - ...