[问题记录] :MyBatis 报错:元素类型为 "configuration" 的内容必须匹配 "(properties?,settings?,typeAliases?,typeHandlers?

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/littleboyandgirl/article/details/82285986

如题:

服务器启动的时候报如下问题,详细错误日志如下:

Caused by: org.xml.sax.SAXParseException; lineNumber: 20; columnNumber: 17; 元素类型为 "configuration" 的内容必须匹配 
 (properties?,settings?,typeAliases?,typeHandlers?,objectFactory?,objectWrapperFactory?,reflectorFactory?,plugins?,environments?,databaseIdProvider?,mappers?)"。
at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(ErrorHandlerWrapper.java:203)

解决方案:

  • 检查”configuration” 根元素下配置的属性是否与DTD文件中定义的一致.
  • 检查各个子节点的顺序是否与DTD中定义的元素:configuration的子节点顺序一致.

什么是DTD?

XML Schema 一样 ,XML DTD 用来定义XML文档的合法构成.

DTD的使用

## 引入DTD文件 ##

提供2种引入方式: 远程引用 与 本地引用
远程引用

<!DOCTYPE 根元素 PUBLIC dtd文件名称 远程URL >
例子(mybatis-config.xml): 
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
    "http://mybatis.org/dtd/mybatis-3-config.dtd">

本地引用

  <!DOCTYPE 根元素 SYSTEM dtd文件路径 > 
  例子(mybatis-config.xml)
  <!DOCTYPE configuration SYSTEM
    "/Users/laiyaoyu/Downloads/firefoxDownload/mybatis-3-config.dtd">

认识DTD

以mybatis-3-config.dtd为例:

<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>
<!ELEMENT databaseIdProvider (property*)>
<!ATTLIST databaseIdProvider
type CDATA #REQUIRED>
...

定义元素
- 定义 有子元素 的元素:

<!ELEMENT 元素名称 (子元素列表逗号分隔)>
例:
<!ELEMENT configuration (properties?, settings?, typeAliases?, typeHandlers?, objectFactory?, objectWrapperFactory?, reflectorFactory?, plugins?, environments?, databaseIdProvider?, mappers?)>

表示: 定义元素 configuration 包含子元素 properties ,settings ...

此处子元素的顺序决定了xml文件中声明元素的顺序,否则会出现文章开始时候的错误.

其中 "?" 正则表达表示 该子元素可以在父元素下出现的次数. 类似使用如下:
? : 0次或1次
+ : >= 一次
* : 任意次
无上述符号 : 1次
  • 定义 无子元素 的元素
<!ELEMENT 元素名称 EMPTY>
例:
<!ELEMENT property EMPTY>
表示:定义元素property,没有子元素. 
  • 定义包括任意元素且子元素无顺序限制的元素
<!ELEMENT 元素名称 ANY>
  • 定义常量
<!ENTITY 元素名称 "元素内容">
例:
<!ENTITY title "问题解析>
表示定义了一个为"title"的常量. 在 xml文件中按照以下方式读取
<article>&title;</article>
  • 定义元素属性

<!ATTLIST 元素名称
属性1名 值类型 属性限定
属性2名 值类型 属性限定
属性3名 值类型 属性限定>
例:
<!ELEMENT typeAlias EMPTY>
<!ATTLIST typeAlias
type CDATA #REQUIRED
alias CDATA #IMPLIED
>
元素 typeAlias的属性列表:
属性:type 字符串类型 必填项
属性:alias 字符串类型 选填项
  • 常用属性的值类型
值类型 描述
CDATA 字符串类型
ID 唯一标识,在XML中只能出现一个,不能重复
(值1|值2|值3) 枚举

- 常用属性限定字符

限定字符 描述
REQUIRED 必填属性
IMPLIED 可选属性
FIXED 固定值
字符串 默认值

例: (<!ATTLIST user EMPTY
gender (男|女) "男">
)

猜你喜欢

转载自blog.csdn.net/littleboyandgirl/article/details/82285986
今日推荐