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

 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. SQL 学习小笔记

    1.FOUND_ROWS() 题目: ,; 在上边sql中使用什么选项可以使 SELECT FOUND_ROWS()忽略LIMIT子句,返回总数? *答案* : SQL_CALC_FOUND_ROWS ...

  2. Hibernate中inverse、cascade的说明

    一: 前沿:刚刚学习hibernate时,对于inverse很是纠结,不知道什么时候该用什么时候不该用,在网上找了一些资料,说的也很含糊,我都不知道如果写了"inverse=true&quo ...

  3. 【BZOJ2227】【ZJOI2011】看电影 [组合数][质因数分解]

    看电影 Time Limit: 10 Sec  Memory Limit: 259 MB[Submit][Status][Discuss] Description 到了难得的假期,小白班上组织大家去看 ...

  4. 密码框JPasswordField 的使用

    JPasswordField的主要方法为setEchoChar(char c),其中的字符C为回显字符. package first; import javax.swing.*; import jav ...

  5. Python小程序之购物车

    需求: 用户入口: 1.商品信息放在文件中,从文件中读取 2.已购商品,余额记录,第一要输入起始金额,以后不需要二次输入 商家入口: 2.可以添加商品,修改商品价格 # Author:Lee Siri ...

  6. 解决cursor未关闭造成的死锁

    参考:https://blog.csdn.net/zc474235918/article/details/72731363/ https://blog.csdn.net/zmx729618/artic ...

  7. SuSE Linux修改网卡配置

    http://blog.chinaunix.net/uid-20765159-id-1850854.html SuSE Linux修改网卡配置             2010 SuSE linux ...

  8. SpringBoot集成整合pageHelper分页插件

    今天来讲讲springboot 集成 pagehelper插件, 引入jar 依赖包 <!-- 分页插件 --><dependency> <groupId>com. ...

  9. selenium 3.0 键盘事件 +强制结束chromedriver进程代码

    selenium自动化测试常常用到键盘操作,一下是键盘操作的详细操作,和部分代码.截图来自于虫师的自动化相关书籍. public static void main(String[] args) thr ...

  10. Android xmlpull 方式解析xml文件

    1.新建一个xml文件,放在res/xml目录下 <?xml version="1.0" encoding="utf-8"?> <citys& ...