JavaWeb笔记-06-jdom4j实现Xpath的的操作 实现简单的学生管理操作(xml文件存储)

1、dom4j支持Xpath的操作形式

可以直接取到某个元素

形式一:aaa/bbb/ccc    表示层级关系  aaa下的bbb下的ccc

形式二://aaa/bbb      表示只要是aaa下的 ,所有的bbb 

形式三: /*  所有元素

形式四: 
    BBB[1] : 表示第一个BBB元素
    BBB[last] : 最后一个BBB

形式五: //BBB[@id]:  得到所有含id属性的BBB 

形式六: //BBB[@id='b1']:  得到所有含id属性且 id= b1 的BBB 

2、 dom4j实现Xpath的操作及前提

操作前提:  默认情况下,dom4j不支持xpath

准备工作: 
    导入支持 xpath 的 jar 包   使用 jaxen-1.1-beta-6.jar 

支持xpath的两个方法(dom4j里面提供的)

    selectNodes("xpath表达式"):  获取多个节点

    selectSingle Nodes("xpath表达式"):  获取单个节点

1)使用xpath实现查询所有name的值

    xpath表达式为: //name
    selectNodes("xpath表达式"): 获取多个节点

    步骤:
    1)得到document    // Document document = Dom4jUtils.getDocument(Dom4jUtils.Path);

    2)获取所有name.selectNodes("name");
            // List<Node> list = document.selectNodes("//name");

    3)遍历list集合 输出name值
        for (Node node : list) {
            String s = node.getText();
            System.out.println(s);  
        }

2)使用xpath实现查询第一个p1下面的name的值

        xpath表达式为: p1[@id="1"]/name
        selectSingle Nodes("xpath表达式"): 获取单个节点

    步骤:
     1)得到document  // Document document = Dom4jUtils.getDocument(Dom4jUtils.Path);

    2)获取name. selectSingleNode("//p1[@id1='1']/name");
            //Node name1 = document.selectSingleNode("//p1[@id1='aaaa']/name");

     3) 得到并输出name值 
            String s = name1.getText();
            System.out.println(s);

3、实现简单的学生管理操作

使用xml当作数据,存储学生信息

创建xml文件  写一些学生信息

分包:
    测试类 : 用于测试方法
    用户类 : 用户的基本内容
    文件信息类 :用户的基本内容存放
    方法类 : 删除,添加,查询。
package service;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.Node;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;
import org.dom4j.io.XMLWriter;

import value.Student;

public class StuService {

    // 查询 根据id查询学生信息
    public static Student getStu(String id) throws DocumentException {
        // 创建解析器
        SAXReader saxReader = new SAXReader();

        // 得到dcument
        Document document = saxReader.read("src/student.xml");

        // 获得所有id
        List<Node> list = document.selectNodes("//id");

        Student student = new Student();
        // 遍历集合
        for (Node node : list) {
            // 找到id值和传递值相等的节点
            if (node.getText().equals(id)) {

                Element stu = node.getParent();// 得到父节点

                //通过父节点得到其他子节点,然后得到其他子节点的值
                String namev = stu.element("name").getText();
                String agev = stu.element("age").getText();
                String idv = node.getText();
                //在for外创建一个student对象,然后传值给student

                student.setId(idv);
                student.setName(namev);
                student.setAge(agev);       
            }
        }
        return student;

    }

    // 删除 根据学生id删除
    public static void delStu(String id) throws Exception {
        // 创建解析器
        SAXReader saxReader = new SAXReader();

        // 得到dcument
        Document document = saxReader.read("src/student.xml");

        // 获得所有id
        List<Node> list = document.selectNodes("//id");

        // 遍历集合
        for (Node node : list) {
            // 找到id值和传递值相等的节点
            if (node.getText().equals(id)) {

                Element stu = node.getParent();// 得到父节点

                Element student = stu.getParent(); // 得到父节点的父节点

                student.remove(stu); // 删除父节点
            }
        }

        // 对内存的操作完后,回写到xml文件中
        // OutputFormat format = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(
                "src/student.xml"), OutputFormat.createPrettyPrint());
        xmlWriter.write(document);
        xmlWriter.close();
    }

    // 增加
    public static void addStu(Student student) throws DocumentException,
            IOException {
        // TODO Auto-generated method stub
        // 创建解析器
        SAXReader saxReader = new SAXReader();

        // 得到dcument
        Document document = saxReader.read("src/student.xml");

        // 得到根节点
        Element root = document.getRootElement();

        // 添加元素stu
        Element stu = root.addElement("stu");

        // 向stu 内添加 id name age
        Element id1 = stu.addElement("id");
        Element name1 = stu.addElement("name");
        Element age1 = stu.addElement("age");

        // 给id name age 赋值
        id1.setText(student.getId());
        name1.setText(student.getName());
        age1.setText(student.getAge());

        // 回写
        OutputFormat forment = OutputFormat.createPrettyPrint();
        XMLWriter xmlWriter = new XMLWriter(new FileOutputStream(
                "src/student.xml"), forment);
        xmlWriter.write(document);
        xmlWriter.close();
    }
}
xml文件
<?xml version="1.0" encoding="UTF-8"?>

<student> 
  <stu> 
    <id>001</id>  
    <name>aaa</name>  
    <age>10</age> 
  </stu>  
  <stu> 
    <id>002</id>  
    <name>bbb</name>  
    <age>20</age> 
  </stu>  
  <stu>
    <id>003</id>
    <name>ccc</name>
    <age>300</age>
  </stu>
</student>

猜你喜欢

转载自blog.csdn.net/qq_41307491/article/details/81211805