什么是DTD?
文档类型定义 (document type definition) (约束);
1、 在XML中加入DTD申明
①、内部申明:<! DOCTYPE root[]>
②、外部申明:<!DOCTYPE 文档根节点 SYSTEM(PUBLIC) “DTD文件名”>
2、 元素定义语法(DTD对元素的限制)
①、基本语法:<! ELEMENT 元素名称 元素类型 >
②、元素分类:
EMPTY 空元素 <br/>
(#PCDATA) 文本元素
(e1,e2) 混合元素
③、 元素限制:
,(顺序)、
|(或,多选一)、
?(0或1次)、
*(0次或多次)、
+(1次或多次)
3、 属性定义语法(DTD对属性的限制)
基本语法:<!ATTLIST 元素名称 属性名称 属性类型 设置说明>
属性类型:ID/CDATA/ENUM (男|女) "男" IDREF
设置说明:#REQUIRED(必须)/#IMPLIED(可选)
4、特殊符号转义
&(逻辑与) --> &
>(大于) --> >
<(小于) --> <
‘(单引号) --> '
“(双引号) --> "
定义三个语句然后获取输入
username=\u6C90\u4ED9\u829D
password=1234
url=www.zking.com
public static void main(String[] args) throws IOException {
//获取文件输入流
InputStream is = Demo1.class.getResourceAsStream("demo.properties");
//创建properties对象
Properties prop = new Properties();
//加载文件输入流
prop.load(is);
//读取配置文件内容
String username = prop.getProperty("username");
String password = prop.getProperty("password");
Object url = prop.getOrDefault("url", "http://www.baidu.com");
System.out.println("username="+username+",password="+password);
System.out.println("url="+url);
}
dom4j+xpath解析xml文件
1)xpath类似数据库中的select语句;
2)Document有节点(Node)组成:元素节点、属性、文本等;
3)selectNodes()获取节点下所有子节点;
4)selectSingleNodes()获取单个节点信息;
5) xpath语法:/(定位路径)、@(获取属性)
案例:解析student.xml
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student pid="p01">
<name>张三</name>
</student>
<student pid="p02">
<name>李四</name>
</student>
<student pid="p03">
<name>王五</name>
</student>
</students>
格式
public static void main(String[] args) throws DocumentException {
try {
//获取student。xml文件输入流
InputStream is = Demo3.class.getResourceAsStream("/student.xml");
//创建saxreader对象
SAXReader saxReader = new SAXReader();
//读取文件输入流并转换document对象
Document doc = saxReader.read(is);
//循环遍历
//1.selectNodess:获取多个节点,返回list
//2.select SingleNode:获取单个节点
//3.xpath语法:/代表定位路径
List<Node> root= doc.selectNodes("/students/student");
for (Node node : root) {
//5.将Node节点转换成元素节点Element
Element elem=(Element) node;
//6.获取元素节点的属性
String pid = elem.attributeValue("pid");
System.out.println("pid="+pid);
//7.获取student节点下的name节点
Node nameNode = elem.selectSingleNode("name");
System.out.println(nameNode.getText());
}
//简化:xpath语法
System.out.println("====================分割线=============================");
Node node = doc.selectSingleNode("/students/student[@pid='p02']/name");
System.out.println(node.getText());
//读取config
// Node node = doc.selectSingleNode("/config/action[@path='/regAction']/type");
// System.out.println(node.getText());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}