
XML 概述XMLExtensible Markup Language是一种可扩展标记语言是 SGML 的子集。与 HTML 不同XML 标签可以由用户自定义具有极高的灵活性。W3C 于 1998 年发布 XML 1.0 版本2004 年发布 1.1 版本但因不向下兼容而未被广泛使用目前主流仍为 1.0 版本。XML 的主要作用包括作为程序的配置文件、不同语言之间的数据交换媒介以及作为小型数据库存储数据。与 HTML 相比XML 的标签是自定义的需要自定义解析器进行解析主要用于数据存储、配置和交换。XML 语法基础XML 文档声明必须位于第一行第一列格式如下?xml version1.0 encodingUTF-8 standaloneno?version必须指定当前主流为 1.0。encoding可选默认为 UTF-8。standalone可选表示是否依赖外部约束文件。XML 元素必须有且仅有一个根元素元素命名区分大小写不能以数字或xml开头不能包含空格。空元素可以简写为hello/。属性必须用引号单引号或双引号包裹同一元素中不能有重复属性名。注释格式为!-- 这是注释 --。特殊字符需要使用转义字符例如转义为lt;转义为gt;。大量特殊字符可以使用 CDATA 区![CDATA[ a 这里不需要转义 /a ]]XML 约束DTD 与 SchemaDTDDocument Type Definition是一种平面式文档扩展名为.dtd用于约束元素、顺序和数量。例如!ELEMENT students (student) !ELEMENT student (name,age,sex) !ELEMENT name (#PCDATA)Schema.xsd本身是 XML 文档支持数据类型、命名空间和继承等功能推荐使用 Schema因其功能更强大且语法统一。XML 解析技术DOM 和 SAX 是两种常见的 XML 解析方式。DOM 将 XML 加载为树结构适合增删改查但大文件性能较差SAX 采用事件驱动方式内存占用小但只能读取。DOM4J 是专为 Java 开发者设计的 XML 解析规范比 DOM 更简洁。常用操作包括读取 XML、获取根元素、遍历子元素以及保存 XML。例如SAXReader reader new SAXReader(); Document doc reader.read(students.xml); Element root doc.getRootElement(); ListElement students root.elements(); for (Element stu : students) { String number stu.attributeValue(number); String name stu.elementText(name); System.out.println(number : name); }保存 XML 的示例OutputFormat format new OutputFormat(\t, true); format.setEncoding(UTF-8); XMLWriter writer new XMLWriter(new FileWriter(out.xml), format); writer.write(doc); writer.close();XPath快速定位 XML 节点XPath 是一种 XML 查询语言DOM4J 对其提供了良好支持。常用操作包括ListNode nodes document.selectNodes(//student[number1001]); Node node document.selectSingleNode(/students/student[1]); String value document.valueOf(//student/name);常用 XPath 表达式示例表达式含义/persons/person根路径下所有person//age任意位置的age//person[1]第一个person//id所有id属性//person[idp1]id为p1的person