XML:
固定格式:<?xml version="1.0" encoding="utf-8" ?>必须是在第一行
一个xml文件只能有一个跟标签:标签命名不能使用关键字xml,XML不能有空格不能有冒号不能以数字作为开头
一个元素也就是<person 属性(id=2)><person/>里面的属性只能有一个同名的但是可以有多个属性例如id,只能有一个id属性但是可以同事写name属性等等。
在xml中"<" ">" "&"是非法的,可以使用转义符"<"是"<" ">"是">" "&"是&
CDATA:格式:
<!--格式-->
<![CDATA[
文本数据 < > & ; " "
]]>
<!--例子-->
<![CDATA[
if salary < 1000 then
]]
dtd约束:
格式:
<DOCTYPE 跟标签(例如:persons)[
<!ELEMENT 跟标签(例如persons)(子标签(例如:person*))>
<ELEMENT 内容标签(例如:name)(#PCDATA)>
<ELEMENT 内容标签(例如:age)(#PCDATA)>
]>
<!--约束根标签 book* 表示books标签下可以有多个book子标签
* + ? 和正则表达式中表示的意思是一样的
* : 0 1 n
+ : 1 n
? : 0 1
-->
<persons>
<person>
<name>张三</name>
<age>18</age>
</person>
</persons>
上边的约束就是讲他们的内容进行约束顺序也不能变,写了约束以后就必须name标签在age标签前边
还有schema约束,不过一般都是写的3w约束
如果是mybatis一般都是这个
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
用这个就行,下边的自己写。
Dom4j:
dom4j的原理:将整个XML文档加载到内存,生成一个DOM树,并获得一个Document对象,通过Document对象就可以对DOM树进行操作。以下面books.xml文档为例。
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book id="0001">
<name>JavaWeb开发教程</name>
<author>张孝祥</author>
<sale>100.00元</sale>
</book>
<book id="0002">
<name>三国演义</name>
<author>罗贯中</author>
<sale>100.00元</sale>
</book>
</books>
以上边的为例子:用dom4j来解析
在java中首先他是用SAXReader的构造方法的Document read(String url)来加载xml到document,然后再获取他的根元素
例子:
public static void main(String[] args) throws Exception{
File file = new File("E:\\heiManote\\Employment\\18代码在17day这是18day\\src\\Person.xml");
SAXReader saxReader = new SAXReader();
Document read = saxReader.read(file); //先获取xml加载的document
//第一种方法剥洋葱式的一层一层剥开
Element rootElement = read.getRootElement(); //等到跟标签
List<Element> elements = rootElement.elements(); //得到子标签集合
for (Element element : elements) { //遍历得到子标签的内容标签
System.out.println(element.element("name").getText()); //name就是内容的标签然后getText得到里面的内容
}
//第二种是直接得到
List<Node> list = read.selectNodes("//最高温度[level=\"C\"]"); // selectNode的“//”表示不受约束,//最高温度 就是找到xml中 <最高温度></最高温度>的标签[level=\"C\"]" 是找<最高温度 level="C"></最高温度>的标签的level属性为c
for (Node o : list) {
System.out.println(o.getText());
}
}