XML小结

1.XML的基本概念
定义:xml(Extensible Markup Language),可扩展标记语言
XML是一种数据的格式,和JSON差不多,可以用这种数据格式来存储和表示一组数据,又一系列的标签组成。
2.XML基本结构

格式良好的 XML 文档

2.XML文档优势
n XML基于文本格式,具有简单性、可扩展性、交互性和灵活性

xml格式一般在项目中做配置文件 Web项目中都可以用xml格式作为配置文件!

还可以不同站点之间作为一种通用的数据交换格式使用,例如webservice…
另外也可以存储少量的数据,类似于数据库的功能,大量的数据库就会存储数据库了!!

3.解析XML文档
XML文件有多种解析方式:
(1) DOM解析 (SUN公司内置)
(2)SAX解析(安卓开发)
(3)JDOM
(4) DOM4J解析(需要导入相关的Dom4J的包,可以再官方网站下载)

XML代码的增删改查:
XML文件的读取:
得到标签属性值的方法为: attribute("") ps:Attribute attribute = l.attribute(“id”);
得到标签的方法:getName() ps: String name = element.getName();
得到标签内的值得方法为: getText() ps:String ID = attribute.getText();
其中涉及到的String类型转换为基本数据类型 ps:Interger.parseInt()
基本数据类型转换为String类型: ps:String.valueof()
package com.dream.XML;

import java.util.ArrayList;
import java.util.List;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;

import com.dream.bean.Stu;

/*

  • XML文件的读取
    */
    public class ReaderXml {
    public static void main(String[] args) throws Exception {
    //将返回的集合复制给stu
    List stu=XMLReader();
    for(Stu l :stu){
    System.out.println(l);
    }

    }
    public static List XMLReader(){
    List li = new ArrayList<>(); //创建空集合用来存放信息
    //创建解析器对象
    SAXReader reader = new SAXReader();
    //获得XML文件信息
    Document document;
    try {
    document = reader.read(“stu.xml”);
    //获得XML文件的根节点
    Element re = document.getRootElement();

     	//获得根节点下面的子节点 并存到集合中
     	List<Element> list = re.elements();
     	for(Element l : list){
     		//获得元素属性为id
     		Attribute attribute = l.attribute("id");
     		//获得元素属性为ID的值
     		String ID = attribute.getText();
     		
     		//创建学生对象
     		Stu stu = new Stu();
     		//将ID放在学生对象中
     		stu.setId(Integer.parseInt(ID));
     		//获得子节点下的节点
     		List<Element> e = l.elements();
     		//遍历子节点
     		for(Element element:e){
     			//获得子节点下节点的属性
     			String name = element.getName();
     			//获得子节点写节点的值
     			String value = element.getText();
     		
     			if("name".equals(name)){
     				stu.setName(value);
     			}
     			if("age".equals(name)){
     				//String 类型的value转换为int类型
     				stu.setAge(Integer.parseInt(value));
     			}
     			if("weight".equals(name)){
     				stu.setWeight(Double.parseDouble(value));
     			}
     		//	System.out.println(name +" " + value);
     		}
     	//	System.out.println("===========");
     		li.add(stu);
     	}
     } catch (DocumentException e1) {
     	
     }
     return li;
    

    }
    }

    增 XML文档
    package com.dream.XML;

import java.io.FileWriter;
import java.util.Scanner;

import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;
/*

  • 增加XML文件的信息

  • 创建一个新标签用addElement() Element stuElement = re.addElement(“student”);

  • 设置一个标签里的属性用 addAttribute(); stuElement.addAttribute(“id”, String.valueOf(id));

  • 设置标签的标签值 为 setText() addElement.setText(name);
    */
    public class AddXML {
    public static void main(String[] args) throws Exception {

    Scanner scanner = new Scanner(System.in);
    System.out.print("请输入你要添加的学生ID:");
    int id =scanner.nextInt();
    System.out.print("请输入你要添加的学生名字:");
    String name =scanner.next();
    System.out.print("请输入你要添加的学生年龄:");
    int age =scanner.nextInt();
    System.out.print("请输入你要添加的学生体重:");
    double weight =scanner.nextDouble();
    //创建相应的对象
    SAXReader reader = new SAXReader();
    //读取XML文件
    Document document = reader.read("stu.xml");
    //获得根节点
    Element re = document.getRootElement();
    
    //增加根节点下的字节点
    Element stuElement = re.addElement("student");
    //设置根节点属性
    stuElement.addAttribute("id", String.valueOf(id));
    
    //创建一个标签
    Element nameElement = stuElement.addElement("name");
    //设置标签值
    nameElement.setText(name);
    
    //创建一个标签
    Element ageElement = stuElement.addElement("age");
    //设置标签值
    ageElement.setText(String.valueOf(age));
    
    //创建一个标签
    Element weightElement = stuElement.addElement("weight");
    //设置标签值
    weightElement.setText(String.valueOf(weight));
    
    // -------------内存中Document对象修改之后,需要保存回去 路径还是原来路径 覆盖了以前的文件---------------
    OutputFormat outputFormat = OutputFormat.createPrettyPrint();
    outputFormat.setEncoding("GBK");
    
    XMLWriter xmlWriter = new XMLWriter(new FileWriter("stu.xml"),outputFormat);
    xmlWriter.write(document);
    xmlWriter.close();
    System.out.println("学生添加成功");
    

    }
    }

删 XML文档:
package com.dream.XML;

import java.io.FileWriter;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Attribute;
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;

/*

  • XML文件的删除节点
    */
    public class DeleteXml {
    public static void main(String[] args) throws Exception {
    Scanner scan = new Scanner(System.in);
    System.out.print(“输入你想删除的编号:”);
    int id = scan.nextInt();

    //创建相应的对象
    SAXReader reader = new SAXReader();
    //讀取XML文件
    Document document = reader.read(“stu.xml”);
    //获得XML文件的根节点
    Element root = document.getRootElement();
    //获得根节点下的字节点
    List childs = root.elements();
    //遍历
    for (Element e : childs) {
    //得到属性id
    Attribute attribute = e.attribute(“id”);
    //得到id对应的值
    String text = attribute.getText();

     if(text.equals(String.valueOf(id))){
     	root.remove(e);
     }
    

    }

    OutputFormat of = OutputFormat.createPrettyPrint();
    of.setEncoding(“GBK”);

    XMLWriter writer = new XMLWriter(new FileWriter(“stu.xml”),of);
    writer.write(document);
    writer.close();
    System.out.println(“删除完成!”);
    }
    }

改 XML文档:
/**
*

  • @time 2019年5月28日下午2:48:52
  • @Description
    */
    package com.dream.XML;

import java.io.FileWriter;
import java.util.List;
import java.util.Scanner;

import org.dom4j.Attribute;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

/**
*

  • @time 2019年5月28日下午2:48:52

  • @Description 貂蝉老了一岁,请把貂蝉的岁数+1
    */
    public class UpdateXML {

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

     SAXReader reader = new SAXReader();
     Document document = reader.read("stu.xml");
     Scanner scanner = new Scanner(System.in);
     Element root = document.getRootElement();
     List<Element> childs = root.elements();// 孩子的集合
     System.out.println("输入要修改的ID值:");
     int loca = scanner.nextInt();
     for (Element c : childs) {
     	Attribute attribute = c.attribute("id");
     	String value = attribute.getText();// 获取ID的属性值
     	
     	if (String.valueOf(loca).equals(value)) {
     		// 找到标签
     		List<Element> list = c.elements();
     		System.out.println("输入要修改的标签名字:");
     		for (Element e : list) {
     			
     			String alterName = scanner.nextLine();
     			String name = e.getName();// 标签名字
     			if (alterName.equals(name)) {
     				String age = e.getText();
     				System.out.println("貂蝉原来的年龄:" + age);
     				e.setText(String.valueOf(Integer.parseInt(age) + 1));
     			}
     		}
     	}
     }
    
     // 因为在修改后 需要保存XML
     // -------------内存中Document对象修改之后,需要保存回去 路径还是原来路径
     // 覆盖了以前的文件---------------
     OutputFormat format = OutputFormat.createPrettyPrint();
     format.setEncoding("GBK"); // 本质工作空间的编码格式是GBK
    
     XMLWriter writer = new XMLWriter(new FileWriter("stu.xml"), format);
     writer.write(document);
     writer.close();
    
     System.out.println("学生更新成功!!!");
    

    }
    }

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值