xml规范及xml解析
http://www.cnblogs.com/wang-meng/p/5374498.html
1,XML基础介绍
xml的概念:
XML 指可扩展标记语言(EXtensible Markup Language),也是一种标记语言,很类似 HTML。
它的设计宗旨是传输数据,而非显示数据它;标签没有被预定义,需要自行定义标签。
xml的作用:
XML 是各种应用程序之间进行数据传输的最常用的工具,并且在信息存储和描述领域变得越来越流行。简单的说,我们在开发中使用XML主要有以下两方面应用.
a.XML做为数据交换的载体,用于数据的存储与传输
b.XML做为配置文件
2,书写规范
注意事项:

xml必须有根元素(只有一个) xml标签必须有关闭标签 xml标签对大小写敏感 xml的属性值须加引号 特殊字符必须转义 xml中的标签名不能有空格,不能以数字或"_" (下划线)开头, 不能以xml(或XML、或Xml 等)开头,名称中间不能包含冒号(:) (有特殊用途) 空格/回车/制表符在xml中都是文本节点 xml必须正确地嵌套
3.xml的约束
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 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 | xml的约束: 作用:明确的告诉我们那些元素和属性可以写,以及他们的顺序如何. 分类:DTD约束和SCHEMA约束 要求:给你xml约束你可以写出对应的xml文档即可. 1 , DTD约束:struts hibernate中有使用 与xml文档的关联: 方式 1 :内部关联 格式:<!DOCTYPE 根元素名称 [dtd的语法]> 方式 2 :外部关联--系统关联 格式:<!DOCTYPE 根元素名称 SYSTEM "dtd路径" > dtd的后缀名是 .dtd 方式 3 :外部关联--公共关联 格式:<!DOCTYPE 根元素名称 PUBLIC "dtd的名称" "dtd路径" > 元素: 格式 1 :<!ELEMENT 元素的名称 (内容)> 格式 2 :<!ELEMENT 元素的名称 类别> 属性: 格式:<!ATTLIST 元素的名称 属性的名称 类型 默认值> 属性的类型: ID:唯一 CDATA:文本 默认值: REQUIRED:必须出现 IMPLIED:可以选择 类别: #PCDATA:文本是一个字符串,不能出现子元素 ,用的时候用(#PCDATA) 符号: + >= 1 ? 0 | 1 * 任意值 | 选择 () 分组 , 顺序 <?xml version= "1.0" encoding= "UTF-8" ?> <!DOCTYPE bookstore[ <!ELEMENT bookstore (book+)> <!ELEMENT book (title,author,year,price)> <!ELEMENT title (#PCDATA)> <!ELEMENT author (#PCDATA)> <!ELEMENT year (#PCDATA)> <!ELEMENT price (#PCDATA)> <!ATTLIST book category CDATA #REQUIRED> <!ATTLIST title lang CDATA #IMPLIED> ]> <bookstore> <book category= "COOKING" > <title lang= "en" >Everyday Italian</title> <author>Giada De Laurentiis</author> <year> 2005 </year> <price> 30.00 </price> </book> <book category= "CHILDREN" > <title lang= "en" >Harry Potter</title> <author>J K. Rowling</author> <year> 2005 </year> <price> 29.99 </price> </book> <book category= "WEB" > <title lang= "en" >Learning XML</title> <author>Erik T. Ray</author> <year> 2003 </year> <price> 39.95 </price> </book> </bookstore> 1 .约束文件的关联 bookstore.xsd xmlns= "http://www.w3.org/2001/XMLSchema" -- 固定值,自定义的约束文件可以出现那些标签 targetNamespace= "http://www.example.org/bookstore" 给当前的xsd起个名称空间,方便目标xml文件引用,名字可以随便起,一般使用域名/自定义名称既可以 例如: targetNamespace= "bookstore" targetNamespace= "http://www.augmentum.com/bookstore" 确定一个目标xml根元素 <element name= "bookstore" ></element> 2 .xml文件的关联 写根标签 添加schema约束 1 .xmlns= "约束的名称空间" -- 值为xsd文件上的targetNamespace的内容 例如: xmlns== "http://www.augmentum.com/bookstore" 2 .xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" :固定的写法 声明此文档是一个 被schema约束的文件 3 .确定文档的位置 xsi:schemaLocation= "{和xsd文件中的targetNamespace} {xsd文件的路径}" 关联小结: 先有约束文件. .xsd targetNamespace 就是给当前的约束文件起个名字,方便xml使用 必须确定根元素 后有xml文件. 写根元素 添加约束 xmlns= "名字" 他的值为targetNamespace中起的名称 xsi:schemaLocation= "名字 位置" 语法: 1 .确定根元素 <element name > name:元素的名称 type:元素的数据类型 2 .确定元素类型 复杂的元素 <complexType> 简单的元素 -- 几乎看不见 <simpleType> 3 .确定顺序: <sequence maxOccurs= "3" > 按次序 相当于 dtd 中, <all> 随意 <choice> 或 相当于dtd中的 | maxOccurs 最大的出现次数 值为unbounded指的是无上限 minOccurs 最小的出现次数 4 .确定属性 <attribute name= "category" type= "string" use= "required" /> name :属性的名称 type:属性的数据类型 use 相当于dtd中 默认值 值为required:必须出现 值为optional:可选 5 .若有属性的元素,内容只是文本 <complexType> --- 指定元素为复杂类型 <simpleContent>--- 指定元素是一个简单的内容,只有文本 <extension base= "string" > -- 文本内容进行扩展 <attribute name= "lang" type= "string" /> -- 添加属性 </extension> </simpleContent> </complexType> <?xml version= "1.0" encoding= "UTF-8" ?> <schema xmlns= "http://www.w3.org/2001/XMLSchema" targetNamespace= "aaa" xmlns:tns= "http://www.example.org/bookstore" elementFormDefault= "qualified" > <element name= "bookstore" > <!-- 1 .确定根元素 <element name > name:元素的名称 type:元素的数据类型 2 .确定元素类型 复杂的元素 <complexType> 简单的元素 -- 几乎看不见 <simpleType> 3 .确定顺序: <sequence maxOccurs= "3" > 按次序 相当于 dtd 中, <all> 随意 <choice> 或 相当于dtd中的 | maxOccurs 最大的出现次数 值为unbounded指的是无上限 minOccurs 最小的出现次数 4 .确定属性 <attribute name= "category" type= "string" use= "required" /> name :属性的名称 type:属性的数据类型 use 相当于dtd中 默认值 值为required:必须出现 值为optional:可选 --> <complexType> <sequence maxOccurs= "unbounded" minOccurs= "1" > <element name= "book" > <complexType> <sequence> <element name= "title" > </element> <element name= "author" type= "string" /> <element name= "year" type= "date" /> <element name= "price" type= "double" /> </sequence> <attribute name= "category" type= "string" use= "optional" /> </complexType> </element> </sequence> </complexType> </element> </schema> bookstore.xsd <?xml version= "1.0" encoding= "UTF-8" ?> <bookstore xmlns= "aaa" xsi:schemaLocation= "aaa bookstore.xsd" xmlns:xsi= "http://www.w3.org/2001/XMLSchema-instance" > </bookstore> |
2,SCHEMA约束:spring中使用的就是schema约束
作用:用来替代dtd的,多个schema可以出现一个xml文档上
需求:
xml 文档中出现了<table>
a约束上的---table :桌子 属性 height width
b约束上的---table :表格 属性 rows cols
名称空间:
作用:用来确定标签的约束来自于那个约束文档上
格式:
方式1:xmlns="名称"
方式2:xmlns:别名="名称"
例如:
table 代表的是桌子
b:table 代表的就是表格
schema的语法:
后缀名.xsd
关联
Schema约束示例:
4.解析xml
解析xml种类:
解析xml文件,解析xml格式的字符串
获取xml中的内容
解析方式:SAX ,DOM4J ,JDOM
区别:
sax:逐行的解析,不能增删改
dom:把整个文档加载到内存中,翻译成一棵树,就可以进行crud操作
JDOM 在性能测试时表现不佳,在测试 10M 文档时内存溢出。在小文档情况下还值得考虑使用 JDOM
如果不考虑可移植性,那就采用DOM4J吧!
要求:
会查询(获取)
DOM4J的解析(只需会查询操作)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通