什么是格式良好XML
1 有且只有一个根元素
2 XML标签大小写正确区分
3 正确使用结束标签
4 正确嵌套标签
5 使用了合法的标签名
6 定义有效的属性
XML中声明DTD
<!Doctype root[]>
定义元素的语法
<!ELEMENT element-name (type)>
元素的分类
element-name:元素名称
<!ELEMENT element-name EMPTY> //空元素
<!ELEMENT element-name (#PCDATA)> //文本元素
<!ELEMENT element-name (e1,e2)> //混合元素,标签里包含了其他的元素
元素的限制
, :顺序
| :或
次数: +(1~n) *(0~n) ?(0或1) 没有(1)
属性定义的语法
att_name:属性名
<!ATTLIST element-name
att_name type
>
类型:
ID :唯一
(男|女) :列表
“值” :默认值
CDATA :文本
IDREF :外键
#REQUIRED :不为空
#IMPLIED :允许为空
XML中的特殊符号
& (逻辑与) &
> (大于) <
< (小于) >
“ (双引号) "
‘ (单引号) '
DTD列子:
config.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE config[
<!ELEMENT config (action*)>
<!ELEMENT action (forward*)>
<!ELEMENT forward EMPTY>
<!ATTLIST action
path CDATA #REQUIRED
type CDATA #REQUIRED
>
<!ATTLIST forward
name CDATA #REQUIRED
path CDATA #REQUIRED
redirect (true|false) "false"
>
]>
<!--config标签:可以包含0~N个action标签 -->
<config>
<!-- action标签:可以饱含0~N个forward标签 path:以/开头的字符串,并且值必须唯一 非空 type:字符串,非空 -->
<action path="/regAction" type="test.RegAction">
<!-- forward标签:没有子标签; name:字符串,同一action标签下的forward标签name值不能相同 ; path:以/开头的字符串
redirect:只能是false|true,允许空,默认值为false -->
<forward name="failed" path="/reg.jsp" redirect="false" />
<forward name="success" path="/login.jsp" redirect="true" />
</action>
<action path="/loginAction" type="test.LoginAction">
<forward name="failed" path="/login.jsp" redirect="false" />
<forward name="success" path="/main.jsp" redirect="true" />
</action>
</config>
XML的作用:
配置:
*.properties
*.XML
数据交换
XML
Webservice
Json
JAVA配置文件的三种配置位置及读取方式
XML和*.properties(属性文件)
存储位置
src根目录下
Xxx.class.getResourceAsStream("/config.properties");
与读取配置文件的类在同一包
Xxx.class.getResourceAsStream("config2.properties");
WEB-INF(或其子目录下)
ServletContext application = this.getServletContext();
InputStream is = application.getResourceAsStream("/WEB-INF/config3.properties");
XML解析
1.properties
//输入流 类名.class.getResourceAsStream 填写配置文件的地址
// /db.properties为src目录下
InputStream is = Test.class.getResourceAsStream("/db.properties");
//解析
Properties properties = new Properties();
properties.load(is);
//键值对的存储方式,根据键的名称获得值
Stringuname = properties.getProperty("uname");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
System.out.println(uname+" "+user+" "+password);
2.xml
InputStream is = Test.class.getResourceAsStream("/students.xml");
SAXReader saxReader = new SAXReader();
Document read = saxReader.read(is);
Stringxpath="/students/student";
//得到xml文件里students下所有student元素节点
List<Node>li = read.selectNodes(xpath);
for (Node node :li) {
//student元素节点
Element studentElement = (Element) node;
// 1.得到student中的sid属性节点
Attribute sidAttribute = studentElement.attribute("sid");
//得到sid中的文本节点
Stringsid = sidAttribute.getText();
// 2.得到student中sid属性节点里的文本节点
Stringsid = studentElement.attributeValue("sid");
//student下的name元素节点
Element nameElement = (Element)studentElement.selectSingleNode("name");
//得到name元素节点中的文本节点
String name = nameElement.getText();
System.out.println(sid+","+name);
}
//得到某个元素节点
InputStream is =Test.class.getResourceAsStream("/students.xml");
SAXReader saxReader =new SAXReader();
Documentread = saxReader.read(is);
//得到student元素节点下一个sid为s003的name元素节点
String xpath="/students/student[@sid='s003']/name";
ElementnameElement = (Element)read.selectSingleNode(xpath);
System.out.println(nameElement.getText());
评论 (0)