第六章 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();
    }
}
相关推荐
小魏冬琅7 分钟前
探索面向对象的高级特性与设计模式(2/5)
java·开发语言
TT哇22 分钟前
【Java】数组的定义与使用
java·开发语言·笔记
look_outs39 分钟前
JavaSE笔记2】面向对象
java·开发语言
武子康43 分钟前
大数据-191 Elasticsearch - ES 集群模式 配置启动 规划调优
java·大数据·elk·elasticsearch·搜索引擎·全文检索
A_aspectJ1 小时前
‌Spring MVC的主要组件有哪些?
java·spring·mvc
塔塔开!.1 小时前
Maven的依赖
java·maven
liuyang-neu1 小时前
力扣第420周赛 中等 3324. 出现在屏幕上的字符串序列
java·算法·leetcode
划]破1 小时前
Maven的安装及配置
java·maven
讓丄帝愛伱1 小时前
dependencyManagement保持maven的多模块依赖版本一致
java·maven
Ellie陈1 小时前
Java已死,大模型才是未来?
java·开发语言·前端·后端·python