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);
  }
}

示例效果:

相关文章
|
17天前
|
Java
Java中ReentrantLock释放锁代码解析
Java中ReentrantLock释放锁代码解析
25 8
|
1天前
|
XML 存储 数据格式
探索 DTD 在 XML 中的作用及解析:深入理解文档类型定义
DTD(文档类型定义)用于定义XML文档的结构和合法元素、属性。它允许不同团体就数据交换标准达成一致,并用于验证XML数据的有效性。DTD可通过内部声明(在XML文档内)或外部声明(在单独文件中)来定义。内部声明示例显示了如何定义`note`元素及其子元素的结构,而外部声明则引用外部DTD文件。元素、属性、实体和PCDATA/CDATA是XML构建模块。DTD中,元素通过ELEMENT声明定义,属性通过ATTLIST声明定义,实体声明提供特殊字符或外部资源的快捷方式。
4 0
|
2天前
|
存储 安全 Java
Java并发编程中的高效数据结构:ConcurrentHashMap解析
【4月更文挑战第25天】在多线程环境下,高效的数据访问和管理是至关重要的。Java提供了多种并发集合来处理这种情境,其中ConcurrentHashMap是最广泛使用的一个。本文将深入分析ConcurrentHashMap的内部工作原理、性能特点以及它如何在保证线程安全的同时提供高并发性,最后将展示其在实际开发中的应用示例。
|
3天前
|
Java
Java输入输出流详细解析
Java输入输出流详细解析
Java输入输出流详细解析
|
3天前
|
存储 Java C++
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
Java集合篇之深度解析Queue,单端队列、双端队列、优先级队列、阻塞队列
17 0
|
5天前
|
XML Java 数据库连接
Javaweb之Mybatis的XML配置文件的详细解析
Javaweb之Mybatis的XML配置文件的详细解析
13 0
|
8天前
|
XML C# 数据格式
C# 解析XML文件
C# 解析XML文件
17 1
|
10天前
|
Java API 数据库
深入解析:使用JPA进行Java对象关系映射的实践与应用
【4月更文挑战第17天】Java Persistence API (JPA) 是Java EE中的ORM规范,简化数据库操作,让开发者以面向对象方式处理数据,提高效率和代码可读性。它定义了Java对象与数据库表的映射,通过@Entity等注解标记实体类,如User类映射到users表。JPA提供持久化上下文和EntityManager,管理对象生命周期,支持Criteria API和JPQL进行数据库查询。同时,JPA包含事务管理功能,保证数据一致性。使用JPA能降低开发复杂性,但需根据项目需求灵活应用,结合框架如Spring Data JPA,进一步提升开发便捷性。
|
15天前
|
Java
Java 15 神秘登场:隐藏类解析未知领域
Java 15 神秘登场:隐藏类解析未知领域
18 0
|
15天前
|
安全 Java 编译器
接口之美,内部之妙:深入解析Java的接口与内部类
接口之美,内部之妙:深入解析Java的接口与内部类
35 0
接口之美,内部之妙:深入解析Java的接口与内部类

推荐镜像

更多