第一篇 XML简介 2
第1章 XML概述 2
1.1 什么是XML 3
1.2 比较XML和HTML 4
1.3 XML的用途 4
1.4 本章小结 4
第2章 XML基础知识 5
2.1 XML语法 6
2.1.1 理解XML文档的本质 6
2.1.2 文档类型声明 7
2.1.3 处理指令 8
2.1.4 文档注释 9
2.1.5 元素 10
2.1.6 属性 12
2.1.7 实体引用 14
2.1.8 CDATA段 15
2.1.9 字符引用 16
2.2 XML文件 16
2.2.1 XML开发工具 16
2.2.2 如何书写XML文档 17
2.2.3 格式良好和有效的XML文档 19
2.2.4 我的XML出了什么错 20
2.2.5 本节小结 23
2.3 开发前奏:XML和Schema,XSLT的关系 23
2.3.1 什么是Schema和XSLT 23
2.3.2 没有Schema和XSLT,XML世界将变成什么样子 24
2.4 本章小结 24
第二篇 XML模式——Schema 26
第3章 浅析Schema开发 26
3.1 Schema简介 27
3.1.1 Schema的本质 27
3.1.2 比较Schema和DTD 27
3.2 使用Schema验证XML文档 29
3.2.1 分析一个Schema 29
3.2.2 用Schema验证XML文档有效性 30
3.3 名称空间 31
3.3.1 什么是名称空间 31
3.3.2 如何理解名称空间 33
3.3.3 无名称空间和默认名称空间 34
3.3.4 名称空间的作用范围 35
3.3.5 本节小结 37
3.4 重新分析Schema文件 38
3.5 Schema内置数据类型 39
3.5.1 xs:string(字符型) 39
3.5.2 xs:decimal(小数型) 39
3.5.3 xs:integer(整型) 40
3.5.4 xs:boolean(布尔型) 40
3.5.5 xs:date(日期型) 41
3.5.6 xs:time(时间型) 41
3.5.7 xs:dateTime(日期时间型) 41
3.5.8 xs:gYearMonth(特定年中的特定月) 42
3.5.9 xs:gMonthDay(每年都会出现的某一天) 42
3.5.10 xs:gDay(每月都会出现的某一天) 42
3.5.11 xs:gMonth(每年都会出现的某个月份) 43
3.5.12 xs:timeDuration(时间段) 43
3.5.13 xs:anyURI(统一资源标识符) 43
3.6 XML元素类型 43
3.7 本章小结 44
第4章 Schema声明简单元素 45
4.1 基本数据类型的使用 46
4.1.1 字符型的使用 46
4.1.2 日期型的使用 46
4.1.3 数值型的使用 47
4.1.4 布尔型的使用 47
4.2 自定义简单类型的使用 48
4.2.1 枚举型——enumeration 48
4.2.2 限制长度——minLength、maxLength 50
4.2.3 取值范围——minInclusive、maxInclusive 51
4.2.4 小数位数限定——totoalDigits和fractionDigits 53
4.2.5 模式匹配——pattern 54
4.2.6 原子类型——atomic 54
4.2.7 列表类型——list 55
4.2.8 联合类型 56
4.2.9 分析type属性值的特殊性 58
4.2.10 type属性与名称空间 58
4.2.11 使用比喻来解释type属性和名称空间关系 62
4.2.12 简单数据类型小结 64
4.3 元素的默认值和固定值 65
4.3.1 元素默认值 65
4.3.2 元素默认值的用途 66
4.3.3 元素固定值 67
4.4 本章小结 68
第5章 Schema声明复杂元素 69
5.1 复杂元素的分类:simpleContent和complexContent 70
5.1.1 理解内容(content) 70
5.1.2 区分simpleContent和complexContent 70
5.2 声明simpleContent元素 71
5.2.1 如何声明simpleContent元素 71
5.2.2 关于类型派生——restriction和extension 73
5.2.3 属性声明 74
5.2.4 使用use定义属性 76
5.2.5 使用default给属性赋予默认值 78
5.2.6 使用fixed限制属性 80
5.3 声明complexContent元素 81
5.3.1 任意类型anyType 81
5.3.2 如何定义complexContent 82
5.3.3 complexContent定义的缩略模式 83
5.3.4 定义子元素顺序 84
5.3.5 定义子元素出现次数 87
5.3.6 顺序指示符及元素出现次数综合使用实例 89
5.3.7 顺序指示符和元素出现次数小结 89
5.3.8 综合使用子元素和属性声明 90
5.3.9 simpleContent和complexContent的几种理解 92
5.4 特殊的复杂类型 95
5.4.1 anyType的约束 95
5.4.2 anyType的约束派生 99
5.4.3 空元素的定义 99
5.4.4 混合内容类型的定义 101
5.5 ref引用 102
5.5.1 ref引用元素声明 103
5.5.2 元素组的使用 105
5.5.3 属性组的使用 106
5.6 全局声明与局部声明 109
5.6.1 什么是全局声明和局部声明 109
5.6.2 目标名称空间(targetNamespace) 111
5.6.3 限定与非限定 112
5.6.4 在Schema中声明名称空间 115
5.6.5 全局声明和局部声明的比较 118
5.6.6 无名称空间元素(属性)如何验证 119
5.7 本章小结 121
第6章 Schema使用技巧 122
6.1 指定唯一性——使用unique 123
6.1.1 定义元素唯一性 123
6.1.2 定义属性唯一性 124
6.1.3 慎用默认名称空间 126
6.2 key和keyref的使用 127
6.3 include的使用 129
6.4 import的使用 132
6.5 使用xml:lang 135
6.6 本章小结 136
第三篇 XML转换——XSLT 138
第7章 浅析XSLT开发 138
7.1 XSLT简介 139
7.1.1 XSLT的本质 139
7.1.2 XSL和XSLT的关系 139
7.1.3 XSLT的专用名称空间 140
7.1.4 XSLT处理器 140
7.2 第一个XSLT文档 140
7.2.1 编写第一个XSLT文档 140
7.2.2 查看第一个XSLT的输出结果 142
7.2.3 为XSLT转换选择处理器 142
7.2.4 修改XSLT文档的参数 143
7.2.5 分析第一个XSLT文档 144
7.2.6 在浏览器中使用XSLT 145
7.2.7 编写XSLT文档的注意事项 146
7.3 本章小结 146
第8章 XSLT基础 147
8.1 进一步思考XSLT的本质 148
8.1.1 XSLT是一门编程语言 148
8.1.2 XSLT相对其他语言的特点 148
8.2 XML文档结构描述——XPath 148
8.2.1 什么是XPath 149
8.2.2 XPath表达式简介 149
8.2.3 XPath和XSLT的关系 150
8.2.4 典型实例 150
8.3 常用XSLT函数概述 152
8.3.1 current()函数——返回当前节点 152
8.3.2 document()函数——使用外部XML文档 153
8.3.3 element-available()函数——判断元素可用性 154
8.3.4 format-number()函数——格式化数字 156
8.3.5 function-available()函数——判断函数可用性 157
8.3.6 generate-id()函数——生成节点id 158
8.3.7 key()函数——返回索引中的节点 158
8.3.8 system-property()函数——返回系统属性 158
8.4 XPath节点集函数 159
8.4.1 count()函数——统计节点个数 159
8.4.2 position()函数——返回节点位置 160
8.4.3 last()函数——返回节点总数 161
8.4.4 name()函数——返回节点名称 162
8.5 XPath字符串函数 162
8.5.1 concat()函数——连接字符串 163
8.5.2 contains()函数——判断包含关系 164
8.5.3 normalize-space()函数——格式化空白符 165
8.5.4 starts-with()函数——判断开头字符串 166
8.5.5 string-length()函数——返回字符串长度 167
8.5.6 substring()函数——截取字符串 167
8.5.7 substring-before()函数——向前截取字符串 168
8.5.8 substring-after()函数——向后截取字符串 169
8.5.9 translate()函数——替换字符 170
8.6 XPath数值型函数 171
8.6.1 ceiling()函数——上取整 171
8.6.2 floor()函数——下取整 172
8.6.3 number()函数——数值转换 173
8.6.4 round()函数——四舍五入取整 174
8.6.5 sum()函数——求和 175
8.7 XPath布尔型函数 176
8.7.1 boolean()函数——计算布尔值 176
8.7.2 false()函数——返回false 177
8.7.3 lang()函数——判断xml:lang属性 177
8.7.4 not()函数——取反操作 178
8.7.5 true()函数——返回true 180
8.8 XPath函数小结 180
8.9 XSLT运算符 180
8.9.1 算术运算符 180
8.9.2 逻辑运算符 180
8.9.3 比较运算符 181
8.10 概念分析 181
8.10.1 当前节点和上下文节点 181
8.10.2 XPath表达式与字符串 183
8.11 本章小结 184
第9章 理解模板 185
9.1 定义和调用模板 186
9.1.1 模板定义语法 186
9.1.2 调用节点模板(xsl:apply-templates) 186
9.1.3 调用命名模板 190
9.2 模板冲突 193
9.2.1 最基本的模板冲突 193
9.2.2 mode属性的使用 195
9.2.3 设置模板优先级——priority属性的使用 197
9.2.4 包含模板 201
9.2.5 导入模板 205
9.3 XSLT执行过程 206
9.3.1 XSLT程序的入口点 206
9.3.2 XSLT程序哪些模板将被执行 207
9.3.3 模板调用顺序跟XML文档没有任何关系 209
9.4 内嵌模板 210
9.5 模板递归 211
9.5.1 节点模板递归 211
9.5.2 命名模板递归 214
9.6 本章小结 218
第10章 XSLT应用——输出 219
10.1 输出文档控制——〈xsl:output〉 220
10.1.1 〈xsl:output〉元素的使用语法 220
10.1.2 定义输出格式——method属性 221
10.1.3 设置输出编码格式——encoding属性 222
10.1.4 设置自动换行和缩进——indent属性 224
10.1.5 输出文档控制小结 225
10.2 输出文本——〈xsl:value-of〉 226
10.2.1 〈xsl:value-of〉语法 226
10.2.2 典型实例1——输出复杂元素 227
10.2.3 典型实例2——输出节点集合 228
10.3 节点复制——〈xsl:copy〉、〈xsl:copy-of〉 229
10.3.1 〈xsl:copy〉元素的使用 229
10.3.2 〈xsl:copy-of〉元素 230
10.4 生成元素——〈xsl:element〉 231
10.4.1 〈xsl:element〉语法 231
10.4.2 典型实例1——动态生成元素名 232
10.4.3 典型实例2——特殊名称空间元素 234
10.4.4 生成元素小结 235
10.5 生成属性——〈xsl:attribute〉 235
10.5.1 〈xsl:attribute〉语法 235
10.5.2 典型实例1——动态生成属性 235
10.5.3 典型实例2——属性值难以获得 237
10.5.4 典型实例3——所依附的元素为〈xsl:element〉 239
10.5.5 典型实例4——生成XSLT文档 241
10.5.6 生成属性小结 243
10.6 输出指令——〈processing-instruction〉 243
10.6.1 〈processing-instruction〉语法 243
10.6.2 典型实例——创建处理指令 243
10.7 输出注释——〈xsl:comment〉 245
10.7.1 〈xsl:comment〉使用语法 246
10.7.2 典型实例——存储报价 246
10.8 输出消息——〈xsl:message〉 248
10.8.1 〈xsl:message〉语法 248
10.8.2 典型实例1——文本提示 248
10.8.3 典型实例2——指令模板 250
10.9 替换名称空间——〈xsl:namespace-alias〉元素 251
10.9.1 〈xsl:namespace-alias〉语法 251
10.9.2 典型实例——生成XSLT文档 252
10.10 〈xsl:decimal-format〉元素 254
10.10.1 〈xsl:decimal-format〉语法 254
10.10.2 典型实例——常用属性使用 255
10.10.3 使用模式分隔符——pattern-separator属性 257
10.11 阻止名称空间的输出 258
10.12 空白符对输出的影响 260
10.12.1 无意义空白符 261
10.12.2 有意义空白符 264
10.12.3 XML Schema与空白符 265
10.13 本章小结 265
第11章 XSLT应用——变量定义和流程控制 266
11.1 定义变量——〈xsl:variable〉 267
11.1.1 使用语法 267
11.1.2 典型实例——select属性赋值 267
11.1.3 使用content赋值 270
11.1.4 select属性和content赋值的区别 271
11.1.5 临时结果树片段 273
11.1.6 变量的有效范围 275
11.1.7 定义变量小结 277
11.2 条件控制——〈xsl:if〉 277
11.2.1 〈xsl:if〉语法 277
11.2.2 分析test属性 277
11.2.3 字符串类型 278
11.2.4 数值类型 279
11.2.5 布尔类型 280
11.2.6 节点集合类型 281
11.2.7 典型实例 282
11.2.8 条件控制小结 283
11.3 多条件选择——〈xsl:choose〉 283
11.3.1 使用语法 284
11.3.2 典型实例 284
11.4 循环处理——〈xsl:for-each〉 287
11.4.1 〈xsl:for-each〉语法 287
11.4.2 典型实例 287
11.4.3 循环嵌套 288
11.4.4 分析〈xsl:for-each〉与〈xsl:apply-templates〉的关系 290
11.4.5 条件约束 292
11.4.6 多条件约束 293
11.4.7 循环处理小结 296
11.5 异常处理——〈xsl:fallback〉 296
11.5.1 〈xsl:fallback〉语法 297
11.5.2 典型实例 297
11.5.3 关于用element-available()函数代替〈xsl:fallback〉 299
11.6 本章小结 300
第12章 XSLT应用——排序、索引与编号 301
12.1 排序处理——〈xsl:sort〉 302
12.1.1 〈xsl:sort〉语法 302
12.1.2 典型实例——单关键字排序 302
12.1.3 典型实例——多关键字排序 304
12.1.4 典型实例——求极值 306
12.2 建立索引——〈xsl:key〉 308
12.2.1 〈xsl:key〉语法 308
12.2.2 典型实例1——一对一映射 308
12.2.3 典型实例2——一对多映射 310
12.2.4 典型实例3——多对多映射 312
12.3 生成编号——〈xsl:number〉 315
12.3.1 使用语法 315
12.3.2 典型实例1——默认输出 316
12.3.3 典型实例2——指定编号 317
12.3.4 典型实例3——指定计数层次和节点 318
12.3.5 典型实例4——指定计数开始位置 324
12.3.6 典型实例5——指定编号格式 326
12.4 本章小结 329
第13章 XSLT应用——分组 330
13.1 什么是分组 331
13.2 解决分组问题的思路 332
13.3 解决分组问题的办法 332
13.4 MuenChian方法分组 335
13.5 较为复杂的分组 338
13.6 本章小结 341
第14章 XPath的灵魂——轴 343
14.1 什么是轴 344
14.1.1 轴的本质 344
14.1.2 轴的分类 344
14.2 前驱轴——preceding 345
14.2.1 前驱轴应用1——分组 346
14.2.2 前驱轴应用2——统计节点 348
14.2.3 preceding轴只与源文档有关 351
14.2.4 preceding轴的方向 352
14.3 前驱兄弟轴——preceding-sibling 354
14.3.1 前驱兄弟轴的应用——分组 355
14.3.2 前驱兄弟轴的应用——统计节点 357
14.3.3 综合应用实例 357
14.4 后继轴——following 361
14.4.1 典型实例 363
14.4.2 following轴的方向 365
14.5 后继兄弟轴——following-sibling 366
14.5.1 典型示例 368
14.5.2 综合应用实例 370
14.6 子轴——child 372
14.6.1 子轴的方向 373
14.6.2 子轴和前驱、后继轴 375
14.7 父轴——parent 377
14.7.1 属性节点的父轴 378
14.7.2 上下文节点的父轴 380
14.8 属性轴——attribute 382
14.8.1 属性轴的方向 383
14.8.2 属性轴的缩略模式 385
14.9 本身轴——self 386
14.10 后代轴——descendant 390
14.10.1 后代轴的方向 391
14.10.2 后代轴的缩略模式 392
14.11 后代或本身轴——descendant-or-self 394
14.11.1 后代或本身轴的方向 395
14.11.2 后代或本身轴的应用 396
14.12 祖先轴——ancestor 397
14.12.1 祖先轴的方向 398
14.12.2 祖先轴的应用——输出XPath 400
14.13 祖先或本身轴——ancestor-or-self 401
14.13.1 祖先或本身轴的方向 402
14.13.2 祖先或本身轴应用——输出XPath 402
14.14 名称空间轴——namespace 403
14.14.1 名称空间轴的默认节点 404
14.14.2 名称空间的继承性 404
14.14.3 名称空间轴上节点的名称 405
14.15 常见问题 405
14.15.1 轴的分类问题 405
14.15.2 节点测试 407
14.15.3 重新理解XPath表达式 408
14.15.4 重新理解“/”和“∥” 408
14.16 本章小结 410
第四篇 EXSLT(扩展XSLT)和XSLT 2.0 412
第15章 EXSLT——扩展XSLT 412
15.1 EXSLT简介 413
15.1.1 EXSLT介绍 413
15.1.2 EXSLT的前景 413
15.2 应用方向一——获得日期和时间 414
15.3 应用方向二——将字符串当做XPath表达式进行计算 417
15.3.1 典型实例1——计算节点 417
15.3.2 典型实例2——变量传递 418
15.4 本章小结 422
第16章 XPath 2.0 423
16.1 XPath 2.0简介 424
16.1.1 XPath 2.0的使用环境 424
16.1.2 对XML Schema内建数据类型的支持 424
16.1.3 增加了XPath数据类型名称空间 426
16.1.4 注意非整数天数的处理 429
16.2 序列概念的引入 430
16.2.1 什么是序列 430
16.2.2 XPath 1.0表达式如何与XPath 2.0兼容起来 431
16.2.3 典型实例——实现循环次数 431
16.3 序列运算符 432
16.3.1 循环操作 432
16.3.2 条件判断 435
16.4 字符串函数 437
16.4.1 compare()函数——比较字符串 437
16.4.2 ends-with()函数——判断结尾字符串 438
16.4.3 starts-with()函数——判断开头字符串 439
16.4.4 string-join()函数——串联序列对象 439
16.4.5 subsequence()函数——获取子序列 441
16.4.6 matches()函数——匹配正则表达式 441
16.4.7 tokenize()函数——分割字符串为序列 443
16.4.8 replace()函数——替换字符串 443
16.4.9 lower-case()函数——返回小写字符 446
16.4.10 upper-case()函数——返回大写字符 447
16.5 数值型函数 448
16.5.1 avg()函数——获取平均值 448
16.5.2 max()函数——获取最大值 449
16.5.3 min()函数——获取最小值 449
16.6 日期型函数 451
16.7 本章小结 454
第17章 XSLT 2.0 455
17.1 XSLT 2.0简介 456
17.1.1 XSLT 2.0的地位 456
17.1.2 如何使用XSLT 2.0 456
17.1.3 XSLT 2.0增加的新内容 456
17.2 XSLT 2.0——分组 457
17.2.1 分组的使用 457
17.2.2 分组排序 459
17.2.3 分组中的上下文节点 461
17.2.4 分组嵌套 462
17.2.5 动态分组 465
17.2.6 利用group-adjacent属性进行相邻分组 468
17.2.7 利用group-starting-with和group-ending-with属性指定分组条件 470
17.3 多文件输出——〈xsl:result-document〉 472
17.3.1 〈xsl:result-document〉语法 472
17.3.2 典型实例——分割XML文档 473
17.4 字符映射——〈xsl:character-map〉元素 475
17.4.1 〈xsl:character-map〉语法 475
17.4.2 典型实例——生成JSP文档 475
17.5 分析字符串——〈xsl:analyze-string〉元素 477
17.5.1 〈xsl:analyze-string〉元素简介 477
17.5.2 典型实例——获得文件名 478
17.5.3 关于regex属性中的“{}” 479
17.5.4 正则表达式分组——regex-group()函数的使用 480
17.6 定义变量〈xsl:variable〉和创建序列〈xsl:sequence〉 482
17.6.1 〈xsl:variable〉元素的变化 482
17.6.2 〈xsl:sequence〉元素 483
17.6.3 序列和临时结果树的优劣比较 485
17.7 本章小结 485
第18章 正则表达式 486
18.1 正则表达式在XML中的应用 487
18.1.1 在XML Schema中的应用 487
18.1.2 在XPath 2.0中的应用 487
18.1.3 在XSLT 2.0中的应用 487
18.2 XML正则表达式简介 488
18.2.1 元字符和普通字符 488
18.2.2 量词 488
18.2.3 字符转义与字符类 489
18.2.4 字符组的使用 490
18.2.5 正则表达式分支 490
18.3 本章小结 490
第五篇 XML在Java中的典型应用 492
第19章 用JDOM解析、处理XML文档 492
19.1 用JDOM解析XML文档 493
19.1.1 准备工作 493
19.1.2 创建Java类 494
19.2 用JDOM处理XML文档 496
19.2.1 创建XML文档 496
19.2.2 删除和修改节点 498
19.3 本章小结 500
第20章 用JAXB处理XML文档 501
20.1 准备工作 502
20.1.1 下载与安装JAXB 502
20.1.2 XJC简介 503
20.1.3 JXL简介 504
20.1.4 查看用来映射的XML Schema文档 504
20.2 项目开发 505
20.2.1 创建项目 505
20.2.2 利用XJC生成Java类 505
20.2.3 存储了字典表的Excel文档 509
20.3 本章小结 512
第六篇 XML在C#中的典型应用 514
第21章 使用XML DOM操作节点 514
21.1 C#中的XML DOM 515
21.1.1 XML DOM的操作对象XmlDocument 515
21.1.2 使用XML文件分析XmlDocument中的对象 515
21.1.3 使用DOM对象获取XML文件 516
21.1.4 使用DOM对象获取XML文件中的指定节点 517
21.1.5 使用DOM对象改变XML文件的数据顺序 519
21.2 XML文件读取器——XmlReader 520
21.2.1 XmlReader的作用 520
21.2.2 对XML的验证 521
21.2.3 使用XmlReader读取XML文件的一部分 521
21.2.4 使用XmlTextReader读取整个XML文件 523
21.3 XML文件编写器——XmlWriter 524
21.3.1 XmlWriter的作用 524
21.3.2 XmlWriter对XML文件的验证 525
21.3.3 用XmlWriter创建并编辑XML文件 525
21.4 XML与DataSet的交互 527
21.4.1 将XML文件转化为DataSet数据集 527
21.4.2 将DataSet数据集转换为XML文件 528
21.5 本章小结 531
附录A 本书光盘应用注意事项 532
附录B 光盘代码说明 533