JAVA中XML讲解(应用案例)

举报
辰兮 发表于 2022/03/23 01:04:56 2022/03/23
【摘要】 文章目录 一.XML文件的概述(1)什么是XML(2)XML 与 HTML 的主要差异(3)XML语法(4)XML 命名规则(5)XML作用(6)XML基本结构 二.XML解析(1)解析方式...

一.XML文件的概述

(1)什么是XML

XML 指可扩展标记语言 所谓的可扩展标记语言,简单说就是指xml文件中的标签可以任意
定义。

  • XML 指可扩展标记语言(EXtensible Markup Language)
  • XML 是一种标记语言,很类似 HTML
  • XML 的设计宗旨是传输数据,而非显示数据
  • XML 标签没有被预定义。您需要自行定义标签。
  • XML 被设计为具有自我描述性。
  • XML 是 W3C 的推荐标准

(2)XML 与 HTML 的主要差异

  • XML 不是 HTML 的替代。
  • XML 和 HTML 为不同的目的而设计:
  • XML 被设计为传输和存储数据,其焦点是数据的内容。
  • HTML 被设计用来显示数据,其焦点是数据的外观。
  • HTML 旨在显示信息,而 XML 旨在传输信息。

(3)XML语法

  • XML 标签对大小写敏感
  • XML 元素都须有关闭标签
  • XML 文档必须有根元素
  • XML 的属性值须加引号

(4)XML 命名规则

XML 元素必须遵循以下命名规则:

  • 名称可以含字母、数字以及其他的字符
  • 名称不能以数字或者标点符号开始
  • 名称不能以字符 “xml”(或者 XML、Xml)开始
  • 名称不能包含空格

(5)XML作用

  • XML用来在程序间传输数据
  • XML可用来存储数据(框架的配置信息)

(6)XML基本结构

  • 文档版本声明及编码
<?xml version="1.0" encoding="UTF‐8"?>

  
 
  • 1
  • 树形结构:所有标签必须包含在一对根标签中
  • 整个文档是一个document对象
  • 节点
  • ①文档中的某个标签及其包含的内容称为一个节点(标签节点 element)
  • ②标签的某个属性也是一个节点(属性节点 attribute)
  • ③文档中的一个文本也是一个节点(文本节点 Text)

二.XML解析

(1)解析方式

  • 所谓的xml解析就是对xml文件进行读写操作。
  • Xml解析方式分为两种:
  • ①dom方式(document object model)
  • 即文档对象模型,它是w3c组织推荐的解析xml的一种方式。
  • ②sax方式(simple api for xml)
  • 不是官方标准,它是xml 社区事实上的标准,几乎所有的xml解析器都支持它
  • dom与sax解析方式,它只一种理论,没有具体API.
  • dom与sax解析方式区别
  • dom:

  • dom解析方式它是将整个xml文件载入内存,以树型结构来存储

  • dom支持回写 可以对xml文件中内容进行crud操作

  • 如果文件内容比较大,不建议使用dom解析。

  • Sax

  • 相比dom,sax是一种更为轻量级解决方案

  • 采用串行读取方式,逐行读取,读取一行解析一行。

  • 编程比较复杂

  • sax只能读取,不能对xml进行修改。

  • 第三方xml解析包
  • Jaxp(sun标准)
  • Jdom:专注于写操作(Java对象–>XML文档)
  • Dom4j:专注于读操作(XML文档–>Java对象)
<?xml version="1.0" encoding="UTF-8"?>
<dogs>
<dog id="1">
  <name>旺财</name>
  <type>哈士奇</type>
</dog>
<dog id="2">
  <name>豆豆</name>
  <type>中华田园犬</type>
</dog>
<dog id="3">
  <name>花花</name>
  <type>藏獒</type>
</dog>
</dogs>

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 根据xml文件创建对应的类
public class Dog {
  private int id;
  private String name;
  private String type;
  
  public int getId() {
    return id;
 }
  public void setId(int id) {
    this.id = id;
 }
  public String getName() {
    return name;
 }
  public void setName(String name) {
    this.name = name;
 }
  public String getType() {
    return type;
 }
  public void setType(String type) {
    this.type = type;
 }
  @Override
  public String toString() {
    return "Dog{" +
        "id=" + id +
        ", name='" + name + '\'' +
        ", type='" + type + '\'' +
        '}';
 }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32

SAXReader Dom4J的读取文件的类

常用方法 解释
Document 文档类 用于加载指定的文档
getRootElement 获取根节点
Element 标签类,元素
elements 获取所有的直接子标签
attribute 获取指定属性名称的属性对象
elementText 获取指定标签名称的文本内容
element 获取指定标签名称的标签对象
  • 代码实现xml解析
public class Dom4j_Case {
  public static void main(String[] args) throws Exception {
    //创建xml读取对象
    SAXReader reader=new SAXReader();
    //读取要解析的xml文件
    Document document=reader.read(new FileInputStream("xml/dogs.xml"));
    //获取根节点
    Element root=document.getRootElement();
    //获取所有的直接子标签
    List<Element> elements = root.elements();
    List<Dog> dogs=new ArrayList<>();
    //遍历
    for(Element element:elements) {
   Dog dog=new Dog();
   //获取指定属性名称的值
   dog.setId(Integer.parseInt(element.attribute("id").getText()));
   //获取指定元素的值
   dog.setName(element.elementText("name"));
   dog.setType(element.elementText("type"));
   //添加到集合
   dogs.add(dog);
   }
    //输出
    System.out.println(dogs);
 }
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26

(2)DOM4J相关类

  • SAXReader 此类用于加载XML文档
  • 构造器:无参构造器
  • 方法: public Document read( String/File…);
SAXReader reader = new SAXReader();
Document doc = reader.read(xmlFileName);

  
 
  • 1
  • 2
  • Document接口
  • 获取根元素: public Element getRootElement();
//通过Document对象调用getRootElement方法获取根元素
Element root = doc.getRootElement();

  
 
  • 1
  • 2
  • Element接口:表示xml文档中的某个元素
//1.获取当前元素的所有属性
List<Attribute> attrs = e.attributes();
//2.根据属性名获取属性值
String attrValue = e.attributeValue(String attrName);
//3.获取当前元素的所有子元素
List<Element> childElements = e.elements();
//4.获取当前元素下指定标签名的子元素
List<Element> childElements = e.elements(String tagName);

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • Attribute接口:表示xml文件中元素的属性
  • attr.getName();
  • attr.getValue();
List<Attribute> attrs = root.attributes();
for (int i = 0; i < attrs.size(); i++) {
    Attribute attr = attrs.get(i);
    //获取属性名
  String attrName = attr.getName();
  //获取属性值
  String attrValue = attr.getValue();
  System.out.println(attrName+"="+attrValue);
}

  
 
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

  • The best investment is in yourself.

在这里插入图片描述

  • 2020.03.20 来自辰兮的第33篇博客

文章来源: blessing.blog.csdn.net,作者:辰兮要努力,版权归原作者所有,如需转载,请联系作者。

原文链接:blessing.blog.csdn.net/article/details/104988868

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。