Java_XML解析精讲

简介: Java_XML解析精讲

XML简介

       可扩展标记语言 (Extensible Markup Language, XML) ,标准通用标记语言的子集,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 XML是标准通用标记语言 可扩展性良好,内容与形式分离,遵循严格的语法要求,保值性良好等优点。

       在电子计算机中,标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合万维网传输,提供统一的方法来描述和交换独立于应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输。

XML特征

XML具有以下特点:

(1) XML可以从HTML中分离数据。即能够在HTML文件之外将数据存储在XML文档中,这样可以使开发者集中精力使用HTML做好数据的显示和布局,并确保数据改动时不会导致HTML文件也需要改动,从而方便维护页面。XML也能够将数据以“数据岛”的形式存储在HTML页面中,开发者依然可以把精力集中到使用HTML格式化和显示数据上。

(2) XML可用于交换数据。基于XML可以在不兼容的系统之间交换数据,计算机系统和数据库系统所存储的数据有多种形式,对于开发者来说,最耗时间的工作就是在遍布网络的系统之间交换数据。把数据转换为XML格式存储将大大减少交换数据时的复杂性,还可以使这些数据能被不同的程序读取。

(3) XML可应用于B2B中。例如在网络中交换金融信息, 目前XML正成为遍布网络的商业系统之间交换信息所使用的主要语言,许多与B2B有关的完全基于XML的应用程序正在开发中。

(4)利用XML可以共享数据。XML数据以纯文本格式存储,这使得XML更易读、更便于记录、更便于调试,使不同系统、不同程序之间的数据共享变得更加简单。

(5) XML可以充分利用数据。XML是与软件、硬件和应用程序无关的,数据可以被更多的用户、设备所利用,而不仅仅限于基于HTML标准的浏览器。其他客户端和应用程序可以把XML文档作为数据源来处理,就像操作数据库一样,XML的数据可以被各种各样的“阅读器”处理。

(6) XML可以用于创建新的语言。比如,WAP和WML语言都是由XML发展来的。WML(Wireless Markup Language,无线标记语言)是用于标识运行于手持设备上(比如手机)的Internet程序的工具,它就采用了XML的标准。

总之,XML使用一个简单而又灵活的标准格式,为基于Web的应用提供了一个描述数据和交换数据的有效手段。但是,XML并非是用来取代HTML的。HTML着重如何描述将文件显示在浏览器中,而XML与SGML相近,它着重描述如何将数据以结构化方式表示。

XML格式

       XML文件格式是纯文本格式,在许多方面类似于HTML,XML由XML元素组成,每个XML元素包括一个开始标记(),一个结束标记()以及两个标记之间的内容,例如,可以将XML元素标记为价格、订单编号或名称。标记是对文档存储格式和逻辑结构的描述。在形式上,标记中可能包括注释、引用、字符数据段、起始标记、结束标记、空元素、文档类型声明( DTD)和序言。

具体规则如下:

1、必须有声明语句。

XML声明是XML文档的第一句,其格式如下:

<?xml version="1.0" encoding="utf-8"?>

2、注意大小写

在XML文档中,大小写是有区别的。“A”和“a”是不同的标记。注意在写元素时,前后标记的大小写要保持一致。最好养成一种习惯,或者全部大写,或者全部小写,或者大写第一个字母,这样可以减少因为大小写不匹配而产生的文档错误。

3、XML文档有且只有一个根元素

良好格式的XML文档必须有一个根元素,就是紧接着声明后面建立的第一个元素,其他元素都是这个根元素的子元素,根元素完全包括文档中其他所有的元素。根元素的起始标记要放在所有其他元素的起始标记之前;根元素的结束标记要放在所有其他元素的结束标记之后。

4、属性值使用引号

在HTML代码里面,属性值可以加引号,也可以不加。但是XML规定,所有属性值必须加引号(可以是单引号,也可以是双引号,建议使用双引号),否则将被视为错误。

5、所有的标记必须有相应的结束标记

在HTML中,标记可以不成对出现,而在XML中,所有标记必须成对出现,有一个开始标记,就必须有一个结束标记,否则将被视为错误。

6、所有的空标记也必须被关闭

空标记是指标记对之间没有内容的标记,比如“”等标记。在XML中,规定所有的标记必须有结束标记。

示例:读取XML示例

<?xml version="1.0" encoding="UTF-8"?>
<users>
  <user>
    <id>1</id>
    <userName>admin</userName>
    <sex>boy</sex>
    <age>20</age>
    <introduce>管理员</introduce>
  </user>
  <user>
    <id>1</id>
    <userName>zhangsan</userName>
    <sex>boy</sex>
    <age>22</age>
    <introduce>张三先生</introduce>
  </user>
</users>

创建XML文件示例

package com.item.demo;
import java.io.FileWriter;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.XMLWriter;
public class Demo1 {
  public static void main(String[] args) throws IOException {
    // TODO Auto-generated method stub
    //内存中创建Document对象
    Document doc=DocumentHelper.createDocument();
    //创建根节点
    doc.addElement("root");
    //创建输出流
    OutputFormat format = OutputFormat.createPrettyPrint();
    //修改输出流编码格式,这里UTF-8用于匹配系统默认编码格式
    format.setEncoding("UTF-8");
    //创建保存文件
    FileWriter fileWriter = new FileWriter("./src/com/item/demo/Demo.xml");
    //将输出流匹配到文件流中
    XMLWriter xmlWriter = new XMLWriter(fileWriter,format);
    // 设置是否转义,默认使用转义字符
    xmlWriter.setEscapeText(false);
    //写入
    xmlWriter.write(doc);
    //刷新关闭
    xmlWriter.flush();
    xmlWriter.close();
  }
}

文件创建效果:

注: 文件无法在ide工具中看到,只能打开文件夹进行查阅。

读取XML示例

这里的XML在上文中给予了。直接复制到当前目录下即可,我的包名是【com.item.demo】,xml文件名称【Users.xml】

package com.item.demo;
import java.io.File;
import java.util.List;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo {
  public static void main(String[] args) throws DocumentException {
    // TODO Auto-generated method stub
    File file = new File("src/com/item/demo/Users.xml");
    SAXReader reader=new SAXReader();
    Document document=reader.read(file);
    //获取根节点
    Element root = document.getRootElement();
    System.out.println("根节点名称:"+root.getName());
    //获取根节点的子节点
    List<Element> list = root.elements();
    for (Element o : list) {
      System.out.println(o.element("id").getText());
      System.out.println(o.element("userName").getText());
      System.out.println(o.element("sex").getText());
      System.out.println(o.element("age").getText());
      System.out.println(o.element("introduce").getText());
    }
  }
}

解析效果:

增删改操作示例:

示例前提,根据Demo1创建一个有基础结构的XML的文件,否则会报异常。

package com.item.demo;
import java.io.IOException;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class Demo4 {
  public static void main(String[] args) throws DocumentException, IOException {
    // TODO Auto-generated method stub
    String fileUrl="src/com/item/demo/Demo.xml";
    SAXReader reader=new SAXReader();
    Document document=reader.read(fileUrl);
    Element rootElement = document.getRootElement();
    //增加了一个users
    Element addElement = rootElement.addElement("user");
    addElement.addElement("id").addText("1");
    addElement.addElement("userName").addText("阿刁");
    addElement.addElement("sex").addText("女");
    addElement.addElement("age").addText("18");
    addElement.addElement("introduce").addText("自由的鸟");
    //增加了一个用于修改和删除的user
    Element addDelElement = rootElement.addElement("user");
    addDelElement.addElement("id").addText("2");
    //修改
    Element updateElement = addDelElement.addElement("userName");
    updateElement.addText("浓睡不消残酒");
    updateElement.setText("雨的凉薄");
    addDelElement.addElement("sex").addText("女");
    addDelElement.addElement("age").addText("17");
    addDelElement.addElement("introduce").addText("打湿的羽毛");
    XMLWrite.WriteUtf8(document, fileUrl);
  }
}

示例效果:

相关文章
|
7天前
|
Java
Java中ReentrantLock释放锁代码解析
Java中ReentrantLock释放锁代码解析
24 8
|
9天前
|
XML JavaScript 前端开发
xml文件使用及解析
xml文件使用及解析
|
5天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
10 0
|
5天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
25 0
接口之美,内部之妙:深入解析Java的接口与内部类
|
24天前
|
Java 程序员 C#
静态构造方法解析,Java新手必看技能
静态构造方法解析,Java新手必看技能
8 0
|
28天前
|
XML Java 数据格式
使用java解析XML文件的步骤
使用java解析XML文件的步骤
10 0
|
30天前
|
Java 开发者
深入解析Java中的Lambda表达式
本文深入探讨Java编程语言中的Lambda表达式,介绍了Lambda表达式的定义、优势以及在实际开发中的应用场景,旨在帮助读者更好地理解和运用这一特性。
|
30天前
|
Java
Java 文件处理完全指南:创建、读取、写入和删除文件详细解析
文件处理简介 文件处理是任何应用程序的重要部分。Java 提供了许多用于创建、读取、更新和删除文件的方法。 Java 文件处理 Java 中的文件处理主要通过 java.io 包中的 File 类完成。该类允许我们处理文件,包括创建、读取、写入和删除文件。
213 1
|
1月前
|
XML 存储 JavaScript
深入学习 XML 解析器及 DOM 操作技术
所有主要的浏览器都内置了一个XML解析器,用于访问和操作XML XML 解析器 在访问XML文档之前,必须将其加载到XML DOM对象中 所有现代浏览器都有一个内置的XML解析器,可以将文本转换为XML DOM对象
72 0
|
8天前
|
存储 Java 数据库连接
java多线程之线程通信
java多线程之线程通信

推荐镜像

更多