java生成xml时用类名作标签_2018.4.13 用java配置/生成Xml文件 结合IO流知识点

自己创建本地文件Hello.txt 里面有数据

小明/23/增城/广东

小花/12/浦东/上海

StudentManager.java

package com.lanqiao.dmeo7;

import java.io.BufferedReader;

import java.io.File;

import java.io.FileNotFoundException;

import java.io.FileOutputStream;

import java.io.FileReader;

import java.io.IOException;

import java.io.Reader;

import java.util.ArrayList;

import java.util.List;

import org.jdom.Document;

import org.jdom.Element;

import org.jdom.JDOMException;

import org.jdom.input.SAXBuilder;

import org.jdom.output.Format;

import org.jdom.output.XMLOutputter;

public class StudentManager {

// 创建集合

List list = new ArrayList();

// 加载数据方法

public void load(String file) throws Exception {

// 创建文件

File files = new File("D:/Hello.txt");

// 字节流转字符流

Reader re = new FileReader(files);

BufferedReader br = new BufferedReader(re);

String str = null;

while ((str = br.readLine()) != null) {

System.out.println("读取文件:\n" + str);

// 拆分每一行数据存进去数组

String[] date = str.split("/");

// 创建对象 将每一行的数据存进对象里面

Student stu = new Student();

stu.setName(date[0]);

// 注意:在这里需要转型 字符串转整形

stu.setAge(Integer.parseInt(date[1]));

stu.setCity(date[2]);

stu.setProvince(date[3]);

// 将对象保存在集合中

list.add(stu);

}

// 遍历输出集合中的数据 第一种

for (int i = 0; i < list.size(); i++) {

Student s = (Student) list.get(i);

System.out.println(s.getName() + "\t" + s.getAge() + "\t" + s.getCity() + "\t" + s.getProvince() + " ");

}

// 第二种 foreach

/*

* for(Student stu : list) { System.out.println(stu.getName()+" "+stu.getAge());

* }

*/

}

// 创建xml文件

public void creatXml() throws FileNotFoundException, IOException {

// 1.创建文档

Document doc = new Document();

// 2.创建根结点 在这里的根结点是通过new 出来的 因为是从没有到有的

Element rootElement = new Element("Students");

//通过集合循环添加对象里面的属性 用setTest 方法

for (int i = 0; i < list.size(); i++) {

// 3.往根结点中添加下面的子节点

rootElement.addContent(new Element("Student").addContent(new Element("name").setText(list.get(i).getName())) // 集合里面不指定范型是用不了Student

// 对象里面的方法的

// 这里要将整形转化为字符串 只要在后面加一个双引号就行了

.addContent(new Element("age").setText(list.get(i).getAge() + ""))

.addContent(new Element("city").setText(list.get(i).getCity()))

.addContent(new Element("province").setText(list.get(i).getProvince())));

}

// 4.把根结点绑定在文档上

doc.addContent(rootElement);

// 5.保存生成的Xml文档IO流 这里是指定输出格式 还有编码格式

XMLOutputter output = new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8").setIndent(" "));

// 指定输出xml的名字 用的是文件输出流 OutputStream out = new FileOutputStream();

// 让子类去实现

output.output(doc, new FileOutputStream("config.xml"));

System.out.println("操作完成,请刷新");

}

// 增 追加xml文件内容

public void addXml(Student stu) throws Exception {

// 创建工厂

SAXBuilder builder = new SAXBuilder();

// 创建文档

Document doc = builder.build(new File("config.xml"));//在这里记得是new File 出来先

// 获取根结点

Element rootEle = new Element("Students");

// 往根结点下面的子节点中添加节点

rootEle.addContent(new Element("Student").addContent(new Element("name").setText(stu.getName()))

.addContent(new Element("age").setText(stu.getAge() + ""))

.addContent(new Element("city").setText(stu.getCity()))

.addContent(new Element("province").setText(stu.getProvince())));

// 将文档绑定到根结点中

doc.addContent(rootEle);

XMLOutputter output = new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8").setIndent(" "));

output.output(doc, new FileOutputStream("config.xml"));

}

// 删 根据名字来删除

public void delXml(String delName) throws JDOMException, IOException {

//创建工厂

SAXBuilder builder = new SAXBuilder();

//创建文档

Document doc = builder.build(new File("config.xml"));

//获取根结点

Element ele = doc.getRootElement();

//获取Element 总根结点下面的所有子节点

List lis = ele.getChildren();

//遍历查找

for (int i = 0; i < lis.size(); i++) {

//获取每一个具体的子节点 例如说 student student student

Element e = lis.get(i);

if(e.getName().equals(delName)) {

//删除子节点的时候要根据根结点来删除

ele.removeContent(e);

System.out.println("Delete Name Successful");

}

}

}

// 改 根据名字来修改

public void updateXml(String oldName, String newName) throws JDOMException, IOException {

// 创建工厂

SAXBuilder builder = new SAXBuilder();

// 创建文档

Document doc = builder.build(new File("config.xml"));

// 获取根结点

Element ele = doc.getRootElement();

//获取根结点下面的子节点 返回的是一个集合

List li = ele.getChildren(); //记得指定集合的类型 不然下面需要转类型

//遍历查找

for(int i = 0; i

Element e = li.get(i);

if(e.getChildText("name").equals(oldName)) {

//getChile 和 getChileText 的区别是 前者获取的是节点 后者是获取节点里面的值

e.getChild("name").setText(newName);//这句话的意思是 第二个根结点下获取的name这个子节点 并且赋值成newName

System.out.println("Update Info Successfully!!");

}

}

//将根结点绑定在文档上面

doc.addContent(ele);

XMLOutputter output = new XMLOutputter(Format.getPrettyFormat().setEncoding("UTF-8").setIndent(" "));

output.output(doc, new FileOutputStream("config.xml"));

}

// 查 根据名字来查询

public void findByName(String findByName) throws JDOMException, IOException {

//创建工厂

SAXBuilder builder = new SAXBuilder();

//创建文档

Document doc = builder.build(new File("config.xml"));

//获取根结点

Element ele = doc.getRootElement();

//将根结点下面的所有节点找出来 返回element 集合 而不是Student

List list = ele.getChildren();

//遍历查找

for (int i = 0; i < list.size(); i++) {

Element e = list.get(i);

if(e.getName().equals(findByName)) {

System.out.println("查询结果如下:\n"+e.getChildText("age")+"\t"+e.getChildText("city"));

}

}

}

}

Test.java

package com.lanqiao.dmeo7;

/**

* 对XMl的增、删、改、查的综合运用

*

* 结合集合的运用

* @author qichunlin

*

*/

public class Test {

public static void main(String[] args) throws Exception {

StudentManager sm = new StudentManager();

sm.load("D:/Hello.txt");

//增

sm.addXml(new Student("小花",23,"武汉","湖南"));

//删

sm.delXml("小齐");

//改

sm.updateXml("小齐","小qi");

//查

sm.findByName("小七");

}

}

Student.java

package com.lanqiao.dmeo7;

/**

* 学生类

* 属性: 名字 年龄 城市 省份

*

* @author qichunlin

*

*/

public class Student {

private String name;

private int age;

private String city;

private String province;

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

public String getCity() {

return city;

}

public void setCity(String city) {

this.city = city;

}

public String getProvince() {

return province;

}

public void setProvince(String province) {

this.province = province;

}

public String toString() {

return "Student [name=" + name + ", age=" + age + ", city=" + city + ", province=" + province + "]";

}

public Student(String name, int age, String city, String province) {

super();

this.name = name;

this.age = age;

this.city = city;

this.province = province;

}

public Student() {

super();

// TODO Auto-generated constructor stub

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值