微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

XML概述

XML

临时存储数据:

  • 变量

  • 数组

  • 对象

  • 对象数组

  • 集合

持久性存储数据:

1. XML 概述

XML:eXtensible MarkuP Language ,可扩展的标记语言。

标记语言:

可扩展的:


XML 是一种数据传输格式!这方面已经很弱了,因为现在有 JSON 格式。

XML 也可以作为一种小型应用的数据存储方案。

XML 可以用作一些项目的配置文件

2. XML 基本文档结构

<?xml version="1.0" encoding="UTF-8"?>
<自定义标签>
    <其他自定义标签></其他自定义标签>
</自定义标签>

3. 编写格式良好的XML

  1. 标签名可以由字母、数字、连字符等组成(特殊符号不要使用)

  2. 标签名建议全部小写,如果双标签有大写的标签,那么记得对应的标签要保持一致。

    <student></Student> 区分大小写

  3. 属性名建议全部小写。

  4. 如果真的需要在 XML 中编写特殊字符,记得使用对应的转义符。

    • > &gt;
    • < &lt;
    • & &amp;
    • ' &quot;
    • <![CDATA[特殊字符内容]]> 适合于特殊字符较多的场景
  5. 所有标签都必须有结束标签 <xx></xx> <xx/>

  6. 标签必须正确嵌套,并且保证同级对齐,下一级缩进。

4. 使用Java操作XML

解析XML文件

DOM

DOM4J

4.1 DOM 树

将 XML 中的标签,以 DOM 树的形式加载好,然后就可以借助于节点间的关系来进行标签操作。

img

4.2 DOM4J使用

  1. 下载 jar 包
  2. 在项目中新建 lib 文件
  3. 将 jar 包拷贝到 lib 文件
  4. 右键 jar 包 -> build path -> add to build path
  5. 根据 API 要求使用

查询数据

// 解析 XML
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/books.xml"));

// 获取根节点
Element rootElement = document.getRootElement();
// 遍历根节点的所有子节点(元素节点)
List<Element> bookEleList = rootElement.elements("book");
for (Element bookEle : bookEleList) {
    // 获取book节点下的指定元素节点内容
    String author = bookEle.elementText("author");
    String title = bookEle.elementText("title");
    String description = bookEle.elementText("description");
    // 获取book节点下的指定属性节点内容
    String id = bookEle.attributeValue("id");
    System.out.println(id + "-" + title + "-" + author + "-" + description);
} 

新增数据

// 解析 XML
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/books.xml"));

// 获取根节点
Element rootElement = document.getRootElement();
Element bookEle = rootElement.addElement("book");
// 添加属性
bookEle.addAttribute("id", "bk003");
// 添加子元素
bookEle.addElement("author").addText("查老师");
bookEle.addElement("title").addText("Java从入门到放弃");
bookEle.addElement("description").addText("从希望到绝望,从入门到入坟。");

// 写入到文件
// 紧凑格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 漂亮格式
OutputFormat format = OutputFormat.createPrettyPrint();

// 指定好输出地址和格式
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/books.xml"), format);
// 将document内容输出
xmlWriter.write(document);
xmlWriter.close();

修改数据

// 解析 XML
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/books.xml"));

// 更换bk003的作者为王伊楠
Element rootElement = document.getRootElement();
List<Element> bookEleList = rootElement.elements("book");
for (Element bookEle : bookEleList) {
    String id = bookEle.attributeValue("id");
    if ("bk003".equals(id)) {
        bookEle.element("author").setText("王伊楠");
        break;
    }
}

// 写入到文件
// 紧凑格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 漂亮格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定好输出地址和格式
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/books.xml"), format);
// 将document内容输出
xmlWriter.write(document);
xmlWriter.close();
System.out.println("更新成功!");

删除数据

// 解析 XML
SAXReader reader = new SAXReader();
Document document = reader.read(new File("src/books.xml"));

// 删除bk003图书
Element rootElement = document.getRootElement();
List<Element> bookEleList = rootElement.elements("book");
for (Element bookEle : bookEleList) {
    String id = bookEle.attributeValue("id");
    if ("bk003".equals(id)) {
        bookEle.getParent().remove(bookEle);
        break;
    }
}

// 写入到文件
// 紧凑格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 漂亮格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定好输出地址和格式
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/books.xml"), format);
// 将document内容输出
xmlWriter.write(document);
xmlWriter.close();
System.out.println("删除成功!");
yPrint();
// 指定好输出地址和格式
XMLWriter xmlWriter = new XMLWriter(new FileOutputStream("src/books.xml"), format);
// 将document内容输出
xmlWriter.write(document);
xmlWriter.close();
System.out.println("删除成功!");

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。