第六章 XML

1.XML简介

XML(EXtensible Markup Language),可扩展标记语言

特点

XML与操作系统、编程语言的开发平台无关

实现不同系统之间的数据交换

作用

数据交互

配置应用程序和网站

Ajax基石

2.XML文档结构

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>   //声明
<books>
    <!--图书信息 -->
    <book id="bk101">
        <author>王珊</author>
        <title>.NET高级编程</title>
        <description>包含C#框架和网络编程等</description>
    </book>
    <book id="bk102">
        <author>李明明</author>
        <title>XML基础编程</title>
        <description>包含XML基础概念和基本作用</description>
    </book>
</books>

3.XML标签

XML文档内容由一系列标签元素组成

​ <元素名 属性名="属性值">元素内容</元素名> ​

属性值用双引号包裹

一个元素可以有多个属性

属性值中不能直接包含<、"、&

不建议使用的字符:'、> ​

4.XML解析器

java 复制代码
SAXReader saxReader =new SAXReader();

5.XML命名空间

XML命名空间的作用

解决在复杂、大型XML文件中,出现名称相同,但是含义不同的元素

XML 复制代码
<?xml version="1.0" encoding="UTF-8"?>
<cameras xmlns:canon="http://www.canon"
    xmlns:nikon="http://www.nikon.com">
    <canon:camera prodID="P663" name="Camera傻瓜相机"/>
    <nikon:camera prodID="K29B3" name="Camera超级35毫米相机"/>
</cameras>

6.DOM解析XML

DOM介绍

文档对象模型(Document Object Model)

DOM把XML文档映射成一个倒挂的树

XML 复制代码
<book >
    <title>三国演义</title>
    <author>罗贯中</author>
    <price>30元</price>
</book>

7.常用接口介绍

DOM解析包:org.w3c.dom

常用接口 常用方法 说明
Document:表示整个 XML 文档 NodeList getElementsByTagName(String Tag) 按文档顺序返回文档中指定标记名称的所有元素集合
Element createElement(String tagName) 创建指定标记名称的元素
Node:该文档树中的单个节点 NodeList getChildNodes() 获取该元素的所有子节点,返回节点集合
Element:XML 文档中的一个元素 String getTagName() 获取元素名称

8.操作XML文件(增删改查)

java 复制代码
/*
* 新增
*/
public static void main(String[] args) throws Exception {
​
    //创建一个空白document对象
    Document newdoc = DocumentHelper.createDocument();
    Element root = newdoc.addElement("stus");
​
    Element e1 = root.addElement("stu");
    e1.addAttribute("id","1004");
    e1.addAttribute("name","老四");
    e1.addAttribute("age","18");
​
    Element e2 = root.addElement("stu");
    e2.addAttribute("id","1007");
    e2.addAttribute("name","老七");
    e2.addAttribute("age","19");
​
    Element e3 = root.addElement("stu");
    e3.addAttribute("id","1008");
    e3.addAttribute("name","老八");
    e3.addAttribute("age","18");
​
​
    OutputFormat of = OutputFormat.createPrettyPrint();
​
    XMLWriter xmlWriter = new XMLWriter(new FileWriter("1.xml"),of);
    xmlWriter.write(newdoc);
    xmlWriter.close();
​
}
/*
* 删除
*/
public static void main(String[] args) throws Exception {
    //创建解析器类
    SAXReader saxReader =new SAXReader();
    //读取xml文件
    Document doc = saxReader.read("students.xml");
    //获得根节点
    Element root = doc.getRootElement();
    Iterator<Element> it = root.elementIterator();
    while (it.hasNext()){
        Element str = it.next();
        //获得自己对象element,再拿到sage对象下的文本内容
        String sage = str.element("sage").getText();
        int a =Integer.parseInt(sage);
        if (a > 18){
            str.getParent().remove(str);
        }
    }
    //将doc  重新保存
    OutputFormat of = OutputFormat.createPrettyPrint();
​
    XMLWriter xmlWriter = new XMLWriter(new FileWriter("students.xml"),of);
    xmlWriter.write(doc);
    xmlWriter.close();
}
/*
* 修改XML文件
*/
public static void main(String[] args) {
    try {
        //创建解析器类
        SAXReader saxReader =new SAXReader();
        //读取xml文件
        Document doc = saxReader.read("students.xml");
        //获得根节点
        Element root = doc.getRootElement();
        //新增子节点
        Element stu = root.addElement("stu");
        //给节点添加属性
        stu.addAttribute("id","1004");
​
        stu.addElement("sname").setText("老六");
        stu.addElement("sage").setText("20");
        OutputFormat outputFormat = OutputFormat.createPrettyPrint();
​
        //将doc重新保存
        XMLWriter xmlWriter = new XMLWriter(new                                                                     FileWriter("students.xml"),outputFormat);
        xmlWriter.write(doc);//写入
        xmlWriter.close();
​
    } catch (Exception e) {
        e.printStackTrace();
    }
}
/*
* 查询XML文件
*/
public static void main(String[] args) {
    try {
        //创建解析器类
        SAXReader saxReader =new SAXReader();
        //读取xml文件
        Document doc = saxReader.read("students.xml");
        //获得根节点
        Element root = doc.getRootElement();
        //获得标签名称
        System.out.println("根节点名称:" + root.getName());
        //获得所有子节点
        List<Element>  list = root.elements();
        for (Element e : list){
            //获得当前元素的属性
​
            String id = e.attributeValue("id");
            System.out.println("学生学号:" + id);
​
            //获得指定名称的所有子节点
            Element sname = e.element("sname");
            Element sage = e.element("sage");
            //获得元素中的内容
            System.out.println("姓名:" + sname.getText());
            System.out.println("年龄:" + sage.getText());
​
​
            //System.out.println("所有子节点名:" + e.getName());
            //List<Element> e1 = e.elements();
            //for (Element a : e1){
            //System.out.println("当前节点写的子节点:" + a.getName());
            //}
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
相关推荐
转世成为计算机大神16 分钟前
易考八股文之Java中的设计模式?
java·开发语言·设计模式
qq_3273427337 分钟前
Java实现离线身份证号码OCR识别
java·开发语言
阿龟在奔跑2 小时前
引用类型的局部变量线程安全问题分析——以多线程对方法局部变量List类型对象实例的add、remove操作为例
java·jvm·安全·list
飞滕人生TYF2 小时前
m个数 生成n个数的所有组合 详解
java·递归
代码小鑫2 小时前
A043-基于Spring Boot的秒杀系统设计与实现
java·开发语言·数据库·spring boot·后端·spring·毕业设计
真心喜欢你吖2 小时前
SpringBoot与MongoDB深度整合及应用案例
java·spring boot·后端·mongodb·spring
激流丶2 小时前
【Kafka 实战】Kafka 如何保证消息的顺序性?
java·后端·kafka
周全全3 小时前
Spring Boot + Vue 基于 RSA 的用户身份认证加密机制实现
java·vue.js·spring boot·安全·php
uzong3 小时前
一个 IDEA 老鸟的 DEBUG 私货之多线程调试
java·后端
AiFlutter3 小时前
Java实现简单的搜索引擎
java·搜索引擎·mybatis