xml&Tomcat
xml
作用:
1. 保存数据
2. 配置文件
3. 数据传输载体
定义:就是一个文件,后缀为.xml
文档声明:
- 简单声明,version:解析这个xml的时候,使用什么版本的解析器解析
<?xml version="1.0" ?>
- encording:解析xml中的文字的时候,使用什么解码来翻译
<?xml version="1.0" encording="gbk" ?>
- standalone:no - 该文档会依赖关联其他文档,yes - 这是一个独立的文档
<?xml version="1.0" encording="gbk" standalone="no" ?>
xml命名规则:
标签可以自定义
xml元素必须遵循以下命名规则:
名称可以含字母、数字以及其他的字符
名称不能以数字或者标点符号开始
名称不能以字符“xml”(或者XML、Xml)开始
名称不能包含空格
命名进尽量简单,见名知意
简单元素 & 复杂元素
属性的定义
xml注释:
<?xml version="1.0" encoding="UTF-8"?>
<!-- 这里有两个学生,一个叫张三一个叫李四 -->
<stus>
<stu id="10086">
<name>张三</name>
<age>24</age>
</stu>
<stu d="10086">
<name>李四</name>
<age>23</age>
</stu>
</stus>
CDATA区*非法字符
< <
& &
如果某段字符串里面有过多的字符,并且里面包含了类似标签或者关键字的这种文字,不想让xml的解析器去解析,那么可以使用CDATA来包装,不过这个CDATA一般比较少看到,通常在服务器给客户段返回数据的时候
<des><!CDATA[<a=href="http://www.baidu.com">百度搜索</a>]]></des>
xml解析
解析方式(面试常问,有很多种常用种,常用两种)
针对以上两种解析方式的API,一些组织或者公司给出的解决方案:
jax sun公司 比较繁琐
jdom
dom4j 使用比较广泛
Dom4j基本用法
注意这里如果项目前面红色感叹号的问题可能是导入多余的jar包,右键工程到configure到library删除添加的jar,并把导错的压缩文件删掉,重新导入
element.element("stu"):返回该元素下的第一个元素
element.elements:返回该元素下的所有
1. 创建SaxReader对象
2. 指定解析的xml
3. 获取根元素
4. 根据根元素获取子元素或者下面的子孙元素
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class MainTest {
public static void main(String[] args) {
try {
//1.创建sax读取对象
SAXReader reader=new SAXReader();
//2.指定解析的xml源
Document ducument = reader.read("src/xml/stus.xml");
//3.得到根元素
Element rootElement = ducument.getRootElement();
/*4.得到根元素下面的子元素,根据stu标签名得到根元素stus下面第一个stu元素,
* 再通过stu获得下面age元素中的文本*/
System.out.println(rootElement.element("stu").element("age").getText());
//得到根元素下面的所有子元素,但不包括孙元素
List<Element> elements = rootElement.elements();
//再根据子元素获得下面的孙元素
for (Element element:elements) {
String name = element.element("name").getText();
String age = element.element("age").getText();
System.out.println("name="+name+" age="+age);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
XPath
xpath是xml的路径语言,支持在解析xml的时候,能够快速定位到具体的某一个元素
- 添加jar包依赖
2.在查找指定节点的时候,根据XPath语法规则来查找(参考ZVON.org - XPath Tutorial中文手册)
3.后续的解析代码一样
import java.util.List;
import org.dom4j.Document;
import org.dom4j.Element;
import org.dom4j.io.SAXReader;
public class XPathTest {
public static void main(String[] args) {
try {
//1.创建sax读取对象
SAXReader reader=new SAXReader();
//2.指定解析的xml源
Document ducument = reader.read("src/xml/stus.xml");
//3.得到根元素
Element rootElement = ducument.getRootElement();
//若想使用XPath,需要先添加jar包 ,获取第一个,只返回一个name
Element nameElement =(Element)rootElement.selectSingleNode("//name");
System.out.println(nameElement.getStringValue());
//不论层级获得所有的age元素的集合
List<Element> list = rootElement.selectNodes("//age");
for (Element element : list) {
System.out.println(element.getText());
}
} catch (Exception e) {
e.printStackTrace();
}
}
}