第六章 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();
    }
}
相关推荐
wm104339 分钟前
java web springboot
java·spring boot·后端
smile-yan40 分钟前
Provides transitive vulnerable dependency maven 提示依赖存在漏洞问题的解决方法
java·maven
老马啸西风41 分钟前
NLP 中文拼写检测纠正论文-01-介绍了SIGHAN 2015 包括任务描述,数据准备, 绩效指标和评估结果
java
Earnest~44 分钟前
Maven极简安装&配置-241223
java·maven
皮蛋很白1 小时前
Maven 环境变量 MAVEN_HOME 和 M2_HOME 区别以及 IDEA 修改 Maven repository 路径全局
java·maven·intellij-idea
青年有志1 小时前
JavaWeb(一) | 基本概念(web服务器、Tomcat、HTTP、Maven)、Servlet 简介
java·web
上海研博数据1 小时前
flink+kafka实现流数据处理学习
java
KpLn_HJL1 小时前
leetcode - 2139. Minimum Moves to Reach Target Score
java·数据结构·leetcode
小扳2 小时前
微服务篇-深入了解 MinIO 文件服务器(你还在使用阿里云 0SS 对象存储图片服务?教你使用 MinIO 文件服务器:实现从部署到具体使用)
java·服务器·分布式·微服务·云原生·架构
龙少95432 小时前
【深入理解@EnableCaching】
java·后端·spring