java | (十六)XML、代理

本文介绍了XML的基本语法规则和在Java中解析XML的方法,重点讲解了DOM4j库的使用。此外,还详细阐述了Java代理的概念,包括静态代理和动态代理的实现,动态代理使用InvocationHandler接口来实现。最后,通过代码实例展示了静态和动态代理的应用。
摘要由CSDN通过智能技术生成

概述

展标记语言,由程序设计编写者自定义实现
XML主要以标记文本形式表示一组或多组数据,使用XML格式传递数据可以实现跨平台跨计算机编程语言

语法规则

必写

<?xml version="1.0" encoding="UTF-8"?>

至少有一个根元素类

&lt; <小于
&gt; >大于
&amp; &和号
&apos; '单引号
&quot; "引号

XML文件的解析

DOM文档对象模型
SAX简单的XML API
JDOM java文件对象模型
DOM4J 拓展于JDOM

JDOM读取xml
创建SAXBuilder来构建加载目标XML文档
基于XML路径创建XML文件对象
使用SAXBuilder加载XML文件对象
利用JDOM相关方法解析XML文档封装成java对象
JDOM写入xml
创建XmlOutput用来修改写入XML文档
基于XML路径创建XML文件对象
使用SAXBuilder加载XML文件对象
利用JDOM相关方法将修改信息写入XML文档
整合
文件目录
在这里插入图片描述
student.xml

<?xml version="1.0" encoding="UTF-8"?>
<!--此文档用来存储学生信息-->
<students><!--students是文档的根元素-->
    <student code="stu001">
        <chen>陈陈陈</chen>
        <age>89</age>
        <></>
    </student>


    <student code="stu002">
        <name>张三</name>
        <age>2</age>
        <sex></sex>
    </student>
    <student code="stu003">
        <name>鸿飞</name>
        <age>23</age>
        <sex></sex>
    </student>
</students>

定义学生类,用来接收XML中的student信息

package entity;

public class Student {
   
    private String name;
    private int age;
    private String sex;
    private String code;

    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 getSex() {
   
        return sex;
    }

    public void setSex(String sex) {
   
        this.sex = sex;
    }

    public String getCode() {
   
        return code;
    }

    public void setCode(String code) {
   
        this.code = code;
    }
}

获取当前路径的方法

package util;

public final class Tools {
   

    public static String getClassPath(){
   
        //获取当前应用程序类路径的通用方法
        return Tools.class.getClassLoader().getResource("").getPath().toString();
    }
}

XML的读取并存储,以及修改XML文件

package util;

import entity.Student;
import org.jdom2.Document;
import org.jdom2.Element;
import org.jdom2.JDOMException;
import org.jdom2.input.SAXBuilder;
import org.jdom2.output.XMLOutputter;

import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
import java.io.Writer;
import java.util.ArrayList;
import java.util.List;

public class JDOMxmlManager {
   
    //用来解析xml文件

    private static SAXBuilder saxbuilder;// 用来构建xml文档

    private static Document document;// XML文档对象

    private static XMLOutputter xmlOutput;

    public static List<Student> toStudentFromXml(String xmlFileName){
   
        //读取xml封装为Student对象,存储到List集合中
        List<Student> stuList = new ArrayList<Student>();
        newInstanceSAXBuilder();
        String classPath = Tools.getClassPath();//调用获取类路径的方法
        System.out.println(classPath);
        /* 基于类路径创建目标xml文件的java.io.File对象*/

        File xmlFile = new File(classPath+"day25/doc/"+xmlFileName);
        System.out.println(classPath+"day25/doc/"+xmlFileName);
        try {
   
            document = saxbuilder.build(xmlFile);// 使用saxBuilder实例构建目标xml文件得到一个Document对象
            if(document != null){
   
                //如果文档不等于空,开始解析
                Element root = document.getRootElement();//获取xml文档对象Document根节点
                List<Element> studentList = root.getChildren();//获取根节点下的一级子元素
                for(Element e:studentList){
   
                    // 循环遍历所有根节点下的Student子元素,并将其封装为Student学生对象
                    Student stuObj = new Student();
                    String code = e.getAttribute("code").getValue();// 获取当前元素的code属性对应的值
                    stuObj.setCode(code);

                    // 获取当前元素的子元素
                    String name = e.getChild("name").getText();
                    stuObj.setName(name);
                    String sex = e.getChild("sex").getText();
                    stuObj.setSex(sex);
                    int age = Integer.parseInt(e.getChild("age").getText());
                    stuObj.setAge(age);
                    //添加到List中
                    stuList.add(stuObj);


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值