一、XML文件

1、介绍

简介:

XML,即,Extensible Markup Language,中文翻译:可扩展标记语言是一种用于标记电子文件使其具有结构性的标记语言。

标签

标签是为了能表达有一定意义的数据的起、止标记,分起始标签和结束标签,就像我们在C或Java中经常见到的{}。起止标签之间的文本称之为内容。基本格式如下:
<student></student>

XML标签遵循如下基本原则:

1、大小写敏感;
2、起止标签必须成对出现,且必须保持严格的顺序。

 正确的例子:

<student>

<id>20201025<id/>

</student>

错误的例子

<student>

<id>20201025</student>

<id/>

标签属性

在开始标签中,可以通过【键 = “值”】的形式定义一个或多个属性

上例可以改写成:

<student id = "20201025">张小三</student>

其中,id = "20201025 就是student标签的id属性。要注意的是: "="后面的值必须要用英文的""包裹起来。

XML文档头

XMl文件应当以一个文档头开始,如:

<?xml verson="1.0"?>

虽然文档头不是必须要写的,但是,强烈建议使用文档头

根标签

XML文件里的众多标签,都应该在一个根标签中书写。如:

<students>

<student id = "20201025">张小三</student>

<student id = "20201026">张小四</student>

</students>

注释

XML中的注释使用:

<!--  注释文字 -->(没有写错,就是这样的)

快捷键:Ctrl + /

注解在解析XML文件时,会自动忽略其中内容。

2、XML文档示例:

创建XML文档:

填写练习示例信息

格式一:着重使用标签

<?xml version="1.0" encoding="UTF-8"?><students><student><id>03167038</id><name>张小三</name><sex>男</sex><birth>2000/5/31</birth><hobbies><hobby>篮球</hobby><hobby>跑步</hobby><hobby>足球</hobby></hobbies><introduce>张三之子,力大如牛,胆小如鼠</introduce></student><student><id>03167039</id><name>刘诗雅</name><sex>女</sex><birth>2000/10/12</birth><hobbies><hobby>唱歌</hobby></hobbies><introduce>刘家独女,热爱唱歌;五音已有其四,邻人不堪其扰,谓之刘嘶哑。</introduce></student><student><id>03167066</id><name>铁哥达</name><sex>男</sex><birth>2000/1/1</birth><hobbies><hobby>排球</hobby><hobby>游泳</hobby><hobby>蹦极</hobby></hobbies><introduce>作家之子:身板结实,称之铁疙瘩。</introduce></student>
</students>

格式二:综合属性和标签

<?xml version="1.0" encoding="UTF-8"?><students><student id = "03167038" name = "张小三" sex = "男" birth = "2000/5/31"><hobbies><hobby>篮球</hobby><hobby>跑步</hobby><hobby>足球</hobby></hobbies><introduce>张三之子,力大如牛,胆小如鼠</introduce></student><student id = "03167039" name = "刘诗雅" sex = "女" birth = "2000/10/12"><hobbies><hobby>唱歌</hobby></hobbies><introduce>刘家独女,热爱唱歌;五音已有其四,邻人不堪其扰,谓之刘嘶哑。</introduce></student><student id = "03167066" name = "铁哥达" sex = "男" birth = "2000/1/1"><hobbies><hobby>排球</hobby><hobby>游泳</hobby><hobby>蹦极</hobby></hobbies><introduce>作家之子:身板结实,称之铁疙瘩。</introduce></student>
</students>

3、解析XMl文档

通过程序设计的方式从XML文档中取出特定的标签的内容,或属性值,并将这些值转换成相应的类对象。

XMl解析器与W3C

Java提供专门的XML解析器,而且解析器也非一家。这里重点介绍W3C标准化了的DOM解析器。

DOM(Document Object Model):文件对象模型,是一种“树形解析器”。(XML文件中的标签与标签之间存在这明显的“一对多关系”,而一对多关系形成的就是:“树形”结构)。

解析代码示例:

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;public class Test {public static void main(String[] args) {try {//创建工程类对象,在工厂类对象中创建应用类对象DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();DocumentBuilder db = dbf.newDocumentBuilder();//当前表明的是当前项目的src目录之下的位置//"/students.xml",表示的是绝对路径//InputStream is = Class.class.getClassLoader().getResourceAsStream("/students3.xml");//上面的示例没搞出来,改变方式,创建了一个新的字符流来接收//用InputStream(输入流)的形式,打开student.xml文档//当前路径指的是从项目名出发到src包下的students.xml文件“csdn_进阶篇/src”InputStream is = new FileInputStream(new File("csdn_进阶篇/src/students.xml"));//测试一下students.xml文档是否能打开System.out.println(is);//这里Document类一定要是org.w3c.dom.Document,绝对不能是其他包路径Document document = db.parse(is);//TagName的意思是“标签名称”,Tag:标签//getElementsByTagName的意思很明确://取得指定标签名称的标签内容,以“节点列表”的形式//返回student.xml中的多个student标签节点内容。NodeList studentList = document.getElementsByTagName("student");//遍历这个节点列表//每一个节点就是student.xml文件中的//<student></student>标签的所有属性和内容for (int i = 0; i < studentList.getLength(); i++) {//这里Element类一定要是org.w3c.dom.Element,绝对不能是其他包路径Element student = (Element) studentList.item(i);//取得student标签的id属性String id = student.getAttribute("id");System.out.println("学号:" + id);}} catch (ParserConfigurationException e) {e.printStackTrace();} catch (SAXException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}}
}————————————————————————————————————————————————————————————————————————————————————————
java.io.FileInputStream@5fa7e7ff
学号:03167038
学号:03167039
学号:03167066

students3.xml文件中,每个学生信息都存在<hobby></hobby>标签,但是,他们分别属于不同的学生,即分属于不同的<student></student>标签。如果忽略了这个层次关系,直接从Document中提取<hobby></hobby>的数据,也是可以的,但是,结果肯定不是我们所期望的:

执行演示结果:

从students.xml文件中取出所有hobby标签内容:

            NodeList hobbyList = document.getElementsByTagName("hobby");for (int i = 0; i < hobbyList.getLength(); i++) {Element student = (Element) hobbyList.item(i);//获取<hobby></hobby>标签的内容String hobby = student.getTextContent();System.out.println("hobby:" + hobby);}
——————————————————————————————————————————————————————————————————————————————
hobby:篮球
hobby:跑步
hobby:足球
hobby:唱歌
hobby:排球
hobby:游泳
hobby:蹦极

从students.xml文件中取出所有hobbies标签内容:

            NodeList hobbiesList = document.getElementsByTagName("hobbies");for (int i = 0; i < hobbiesList.getLength(); i++) {Element student = (Element) hobbiesList.item(i);//获取<hobbies></hobbies>标签的内容String hobbies = student.getTextContent();System.out.println("hobbies:" + hobbies);}——————————————————————————————————————————————————————————————————————————————————————
hobbies:篮球跑步足球hobbies:唱歌hobbies:排球游泳蹦极

上面的两种输出情况都是所有学生的爱好信息,但是这样的结果不是我们所需的。我们希望得到的是一个学生的爱好信息,而不是所有。

得到一个学生的所有爱好信息代码示例:

            NodeList studentList = document.getElementsByTagName("student");//遍历这个节点列表//每一个节点就是student.xml文件中的//<student></student>标签的所有属性和内容for (int i = 0; i < studentList.getLength(); i++) {Element student = (Element) studentList.item(i);//取得student标签的id属性String id = student.getAttribute("id");//取得student标签的name属性String name = student.getAttribute("name");System.out.println(id +": " + name);//以Element的student对象进行为基础,创建hobbyList对象NodeList hobbyList = student.getElementsByTagName("hobby");for (int j = 0; j < hobbyList.getLength(); j++) {Element hobbyTag = (Element) hobbyList.item(j);//获取<hobby></hobby>标签的内容String hobby = hobbyTag.getTextContent();System.out.println("hobby:" + hobby);}}————————————————————————————————————————————————————————————————————————————————————————
03167038: 张小三
hobby:篮球
hobby:跑步
hobby:足球
03167039: 刘诗雅
hobby:唱歌
03167066: 铁哥达
hobby:排球
hobby:游泳
hobby:蹦极

二、Properties文件解析

Properties文件解析相对较容易,直接用键值对就行。

Properties文件示例:

# 最大值
maxNUM = 30
# 最小值
minNUm = 20
# 增量
incNUM = 3

解析代码示例:

import java.io.*;
import java.util.Enumeration;
import java.util.Properties;public class TestProperties {public static void main(String[] args) {try {Properties properties = new Properties();InputStream is = new FileInputStream(new File("csdn_进阶篇/src/config.properties"));System.out.println(is);properties.load(is);Enumeration<Object> keys = properties.keys();while (keys.hasMoreElements()){String key = (String) keys.nextElement();String value = properties.getProperty(key);System.out.println(key + ":" + value);}} catch (FileNotFoundException e) {e.printStackTrace();} catch (IOException e) {e.printStackTrace();}//测试一下students.xml文档是否能打开}
}——————————————————————————————————————————————————————————————————————————————————
java.io.FileInputStream@10f87f48
incNUM:3
maxNUM:30
minNUm:20

MEC@JavaSE@进阶篇@笔记09@XML文件以及Properties文件解析初步相关推荐

  1. MEC@JavaSE@实战篇@笔记05@计算机网络技术基础

    一.计算机网络技术基础 1.计算机网络的基本定义 计算机网络是指将地理位置不同的具有独立功能的多台计算机及其外部设备,通过通信线路连接起来,在网络操作系统中,网络管理软件及网络通信协议的管理和协调下, ...

  2. JavaSE进阶学习笔记-目录汇总(待完成)

    声明:此博客来自于黑马程序员学习笔记,并非商用,仅仅是为了博主个人日后学习复习用,如有冒犯,请联系qq208820388立即删除博文,最后,来跟我一起喊黑马牛逼黑马牛逼黑马牛逼 JavaSE进阶学习笔 ...

  3. JBoss 系列十四:JBoss7/WildFly如何加载外部的文件或properties文件

    http://www.tuicool.com/articles/M7ZR3y 原文 http://blog.csdn.net/kylinsoong/article/details/12623997 主 ...

  4. 黑马MySQL进阶篇笔记

    目录 MySQL进阶篇 一.存储引擎 1.1 Mysql体系结构图 1.2 存储引擎 1.概念 2.InnoDB 3.MyISAM 4.Memory 5.三种引擎对比 6.引擎的选择 1.3 安装my ...

  5. javaSE进阶学习笔记

    1.关于java的集成开发环境: eclipse.IntelliJ IDEA等. 其中目前主流的集成开发环境是:IntelliJ IDEA 这只是一个工具,不要让一个工具把你难住了. 开发工具不要使用 ...

  6. JAVASE的学习笔记(九)(Properties类和面向接口编程)

    JAVASE的学习笔记(九) Properties类 简单操作(添加,取出) 属性文件读取配置信息(重要) 属性写入信息(追加) 面向接口编程(小程序) Properties类 简单操作(添加,取出) ...

  7. JavaSE进阶590-597 序列化和反序列化/IO和Properties联合

    开始时间:2021-01-05 对象的序列化和反序列化 将Java对象放在硬盘的操作->序列化(拆分对象) serialize 传的时候是一个数据包一个数据包的传,传的每个部分都有编号(应该用的 ...

  8. linux properties文件,读取Properties文件六种方法

    开发项目时,经常把一些参数存入Properties文件,以增加程序的灵活性.所以读取properties文件可以说是我们的java基础.我们可以通过以下六种方法读取配置参数(注意:spring对pro ...

  9. Spring Boot笔记-logback-spring.xml获取application.properties中的变量

    logback.xml的加载顺序早于springboot的application.yml (或application.properties) 配置文件当然读不到application.yml(或app ...

最新文章

  1. OSChina 周二乱弹 —— 这简直是对佛祖的DDoS攻击啊
  2. apache rewrite 支持post 数据
  3. html自定义颜色函数,javascript设置元素背景颜色
  4. 基础知识:元组、字典、集合
  5. 最短路径之Spfa算法
  6. 20165313 《Java程序设计》第七周学习总结
  7. 深入了解Java 8中的可选类API
  8. 禁用使用未签名驱动导致的windows 7自动修复
  9. linux - android安卓 - stagefright
  10. ZA7783是一颗将单路MIPI DSI信号转换成单路LVDS/TTL信号的转接芯片
  11. ps 图片 透明度 设置
  12. 软考试题合格率如何?
  13. 哪些软件是用C++写的
  14. python 常见算法题
  15. Python爬取京东商品评论和图片下载
  16. 程序和进程和线程的区别是什么?
  17. clear 和evict
  18. A站(ACFun)爬虫爬取并播放、下载视频(JAVA)
  19. swf to html5 movie maker,SWF to Video Converter Pro(Flash转换视频格式)
  20. 算法第四版课后习题答案 西安电子科技大学 计算机学院 算法课

热门文章

  1. 【Python案例】爬取某bo热搜榜并做动态数据展示
  2. mysql5.7.26:[ERR] 1118 - Row size too large (> 8126)
  3. PostgreSQL 11 新特性之哈希分区
  4. initWithFormat 和stringWithFormat的区别
  5. strtok,sterror函数
  6. 各种小知识点(笔记本)
  7. 斯蒂夫乔布斯传札记:第二波
  8. unity编辑器拓展整理(主要是siki的视频教程)
  9. Verilog 最全经验总结
  10. Hackme-1靶机