093.JAVA拓展_XML文件


博主的 Github 地址


1. XML 文件

1.1. XML 概述

  • HTML 和 XML 的区别

    • HTML: 用来显示页面, 网页.
    • XML: 用来传输数据, 而非显示数据.
      XML 标签没有被预定义, 需要用户自行定义标签.
  • XML 的必要性:

    • XML 是一种通用的数据交换格式, 许多项目都采用 XML 作为数据交换格式
    • 掌握 XML 是软件开发人员的一项基本技能
      在 Struts1.x, Struts2.x, Spring, Hibernate, Mybatis 等
      任意一个 java ee 框架中都可用 XML 做配置文件。

1.2. XML 格式和语法说明

1.2.1. 文件格式
  • XML 有两个编码, 要保证两个编码相同, 都为 UTF-8.
    • 内容编码;
    • 文件本身的编码;
1.2.2. 语法格式
  • 一个 XML 文档必须有且仅有一个根标签, 不允许标签嵌套, 区分大小写.

  • 注释格式: <!-- 注释内容 -->

  • 在编写 XML 文档时, 需要先使用文档声明来声明 XML 文档, 且必须出现在文档的第一行.

    • 语法:
      <?xml version=“1.0” ?>
  • encoding 属性说明文档所使用的字符编码, 默认为 UTF-8.
    要保证保存在磁盘上的文件编码要与声明的编码一致.

    • 语法:
      <?xml version=“1.0”encoding= “UTF-8”?>
  • standalone 属性说明文档是否独立, 即是否依赖其他文档.

    • 语法:
      <?xml version=“1.0”standalone= “yes”?>
  • CDATACharacter Data 的缩写.

    • 语法:

      <![CDATA[数据内容]>
    • 作用:
      把标签当做普通文本内容; 解析器不对 CDATA 区中的内容进行解析,
      而是将这些数据原封不动地交给程序去处理.


1.3. XML 文件解析

  • DOM(Document Object Model):
    文档対象模型. 使用面向対象的方式, 把 XML 文件中的结构使用対象来表示.

  • 在 XML 中,一切皆节点(Node).

    • Document: 文档节点(XML 文件)

    • Element: 元素节点(使用 <> 表示标签)

    • Attr: 属性节点(元素上 属性名="属性値")

    • Text: 文本节点(元素之间的内容)


2. DOM 文档对象

  • 在加载的时候会把 XML 加载进内存中, 在内存中形成一棵 DOM 树.

  • 因此在使用代码操作 Document 对象的时候, 操作的是内存中的 DOM 树,
    和磁盘中的 XML 文件并没有太大的关系, 磁盘的 XML 文件只用作生成 DOM 树.

  • 但是一旦内存中的 DOM 树结构发生了变化, 即进行了增删改任一操作之后,
    那么就必须将这种变化从内存的 DOM 树同步到磁盘中的 XML 文件中去.

  • 值得注意的是, 若 XML 文件体积过大, 可能会在导入过程中出现内存溢出的错误.

2.1. 获取 DOM 文档对象

  • org.w3c.dom.Document 操作 DOM 对象主要涉及到该类.
  • javax.xml.parsers.DocumentBuilder 获取 DOM 对象主要由该类完成.
  • javax.xml.parsers.DocumentBuilderFactory 用于获取 DocumentBuilder 对象.
2.1.1. 获取 DOM 对象的步骤

1) 创建 DocumentBuilderFactory 对象(工厂类中一般都有静态方法用于返回当前工厂类对象)
java DocumentBuilderFactory facObj = DocumentBuilderFactory.newInstance();

2) 根据工厂对象, 创建 DocumentBuilder 对象.
java DocumentBuilder dcObj = factory.newDocumentBuilder();

3) 根据 DocumentBuilder 对象去解析一个已经存在的 XML 文件, 从而得到 Document 对象. java File f = new File("D:/Files/properties.xml"); Document dom = dcObj.parse(f);

2.1.2. 获取 DOM 对象涉及的两个方法的区别
  • 根据 DocumentBuilder 创建 Document 对象, 有两种方式:

    • 当 XML 文档不存在的时候, 使用 newDocument.
      表示在内存中先创建出一棵 DOM 树, 之后再在磁盘中创建 XML 文件.
      创建的 XML 文件的内容与 这棵 DOM 树的内容保持一致.
        Document doc = builder.newDocument();
    • 当 XML 文档存在的时候, 只需要直接去解析即可.
        Document doc = builder.parse(File 对象);

2.2. 操作 DOM 对象的方法

  • 操作与 js 中对 HTML 文件的操作方式相似, 自行查阅方法即可.

  • 将程序中的 DOM 对象在做完增删改操作后的修改同步回源 XML 文件中,
    需要用到 javax.xml.transform.Transformer 这个类的 transform() 方法.

2.2.1. 同步本地 XML 文件操作实例
//同步操作: 把内存中的数据同步更新到磁盘的XML中. 核心类:Transformer.
TransformerFactory factory = TransformerFactory.newInstance();
Transformer trans = factory.newTransformer();
Source xmlSource = new DOMSource(doc);//源: 内存中的Document对象
Result outputTarget = new StreamResult(f);//目标: 磁盘中的XML文件, 已封装进 File 对象中
trans.transform(xmlSource, outputTarget);//同步操作
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值