特殊文件:XML文件
一、概述
XML( 全称EXtensible Markup Language, 可扩展标记语言 )
本质是一种数据的格式,可以用来存储复杂的数据结构,和数据关系。
1.XML的特点 XML中的“<标签名>” 称为一个标签或一个元素,一般是成对出现的。
2.XML中的标签名可以自己定义(可扩展),但必须要正确的嵌套。
3.XML中只能有一个根标签。
4.XML中的标签可以有属性。
5.如果一个文件中放置的是XML格式的数据,这个文件就是XML文件,后缀一般要写成.xml。
XML的创建 就是创建一个XML类型的文件,要求文件的后缀必须使用xml,如hello_world.xml
XML文件的后缀名为:xml,文档声明必须是第一行
<?xml version="1.0" encoding="UTF-8" ?>
version:XML默认的版本号码、该属性是必须存在的 encoding:本XML文件的编码
XML中书写”<”、“&”等,可能会出现冲突,导致报错,此时可以用如下特殊字符替代。
XML中可以写一个叫CDATA的数据区: <![CDATA[ …内容… ]]>,里面的内容可以随便写
应用场景:经常用来做为系统的配置文件;或者作为一种特殊的数据结构,在网络中进行传输。
二、读取XML文件中的数据
DOM4J解析XML文件的思想:文档对象模型
把整个文档看作一个对象
Dom4j解析XML-得到Document对象
SAXReader:Dom4j提供的解析器,可以认为是代表整个Dom4j框架
Document
Element提供的方法
public static void main(String[] args) throws Exception {// 1、创建一个Dom4J框架提供的解析器对象SAXReader saxReader = new SAXReader();// 2、使用saxReader对象把需要解析的XML文件读成一个Document对象。Document document =saxReader.read("properties-xml-log-app\\src\\helloworld.xml");// 3、从文档对象中解析XML文件的全部数据了Element root = document.getRootElement();System.out.println(root.getName());// 4、获取根元素下的全部一级子元素。// List<Element> elements = root.elements();List<Element> elements = root.elements("user");for (Element element : elements) {System.out.println(element.getName());}// 5、获取当前元素下的某个子元素。Element people = root.element("people");System.out.println(people.getText());// 如果下面有很多子元素user,默认获取第一个。Element user = root.element("user");System.out.println(user.elementText("name"));// 6、获取元素的属性信息呢?System.out.println(user.attributeValue("id"));Attribute id = user.attribute("id");System.out.println(id.getName());System.out.println(id.getValue());List<Attribute> attributes = user.attributes();for (Attribute attribute : attributes) {System.out.println(attribute.getName() + "=" + attribute.getValue());}// 7、如何获取全部的文本内容:获取当前元素下的子元素文本值System.out.println(user.elementText("name"));System.out.println(user.elementText("地址"));System.out.println(user.elementTextTrim("地址")); // 取出文本去除前后空格System.out.println(user.elementText("password"));Element data = user.element("data");System.out.println(data.getText());System.out.println(data.getTextTrim()); // 取出文本去除前后空格}
目标:如何使用程序把数据写出到 XML文件中去。
public static void main(String[] args) {// 1、使用一个StringBuilder对象来拼接XML格式的数据。StringBuilder sb = new StringBuilder();sb.append("<?xml version=\"1.0\" encoding=\"UTF-8\" ?>\r\n");sb.append("<book>\r\n");sb.append("\t<name>").append("从入门到跑路").append("</name>\r\n");sb.append("\t<author>").append("dlei").append("</author>\r\n");sb.append("\t<price>").append(999.99).append("</price>\r\n");sb.append("</book>");try (BufferedWriter bw = new BufferedWriter(new FileWriter("properties-xml-log-app/src/book.xml"));){bw.write(sb.toString());} catch (Exception e) {e.printStackTrace();}}