JavaWeb —Dom解析
dom解析:
介绍Xml文件的特点:
1.标签必须成对出现 ,但是命名空间除外<‘stu : dent’><’/stu : dent’>
2.不可以用数字开头,但是可以用字母、下划线开头,标签中不能出现空格 。
3.只能有一个根标签
作用:
1.作为web工程的资源配置文件
2.作为小型数据库
头: <’?xml version=“1.0” encoding=“utf-8”?’>
dom解析的原理:
将xml文档进行封装,将没个标签都封装成标签对象(Node)
步骤:
1.创建dom解析器:
SAXReader read=new SAXReader();
2.创建xml文档对象
Document doc=read.reader(类名.class.getClassLoarder.getResource("xxx.xml"));
dom解析器方法中:reader(url)
url:
1.资源的绝对路径
2.通过反射获取路径 类名.getClassLoader.getResource(“xxx.xml”);
3.获取根标签对象:
Element eleRoot=doc.getRootElement();
4.获取根标签下的子标签
··第一种方法,通过根标签获取第一个子标签
Element elm=eleRoot.element("子标签名称");
··第二种方法,通过更标签获取所有同名子标签,返回一个List集合
List<Node> elmAll=eleRoot.elements("子标签名称");
还可以通过链式编程进一步获取根标签的孙标签:
Element gradson=elm.elemet("孙标签名称")
5.获取标签属性:
第一种方法:直接获取标签属性值,用attributeValue(“属性名称”);
String value=elm.AttributeValue("属性名");
第二种方法:通过属性对象获取
Attribute attribute=elm.attribute("属性名");
String name=attribute.getName();
String value=attribute.getValue();
6.获取获取文本
第一种方式,直接获取文本
String text=elm.getText();
第二种方式,通过父节点
String text1=父节点.elementText("子标签");
String text2=父节点.elementText("子标签");
配置文件:
<?xml version="1.0" encoding="utf-8"?>
<contact_list>
<contact id="1">
<name>张三</name>
<age>20</age>
<email>1212@qq.com</email>
<phone>11111</phone>
</contact>
<contact id="2">
<name>李四</name>
<age>33</age>
<email>nihaoa@163.com</email>
<phone>22222</phone>
</contact>
<contact id="3">
<name>王五</name>
<age>34</age>
<email>10932vip@q.com</email>
<phone>33333</phone>
</contact>
</contact_list>
案例1.将contact.xml保存到ArrayList中
1.首先,准备一个Contact类
public class Contact {
private String name;
private String age;
private String email;
private String phone;
public void setName(String name) {
this.name = name;
}
public void setAge(String age) {
this.age = age;
}
public void setEmail(String email) {
this.email = email;
}
public void setPhone(String phone) {
this.phone = phone;
}
@Override
public String toString() {
return "Contact{" +
"name='" + name + '\'' +
", age='" + age + '\'' +
", email='" + email + '\'' +
", phone='" + phone + '\'' +
'}';
}
}
public class Demo4 {
public static void main(String[] args) throws Exception{
//1.获取文档对象
Document doc=new SAXReader().read(Demo4.class.getClassLoader().getResource("contact.xml"));
//2.获取全部的子标签
List<Element> list=doc.getRootElement().elements("contact");
//3.创建一个ArrayList用来存储Contact
ArrayList<Contact> arrayList=new ArrayList<Contact>();
Iterator<Element> iterator=list.iterator();
//将每个标签的值放到Contact中,再将Contact放到ArrayList中
while(iterator.hasNext()){
Element element=iterator.next();
Contact contact=new Contact();
contact.setName(element.elementText("name"));
contact.setAge(element.elementText("age"));
contact.setEmail(element.elementText("email"));
contact.setPhone(element.elementText("phone"));
arrayList.add(contact);
}
for (Contact i:arrayList){
System.out.println(i);
}
}
}
案例2.将xml文件存放到磁盘中
public class Demo5 {
public static void main(String[] args) throws Exception{
//1.获取文档对象
Document doc=new SAXReader().read(Demo5.class.getClassLoader().getResource("contact.xml"));
//2.获取输出对流
OutputStream out=new FileOutputStream("D:/contact.xml");
//设置输出格式
OutputFormat format=OutputFormat.createPrettyPrint();
//设置编码格式
format.setEncoding("utf-8");
//XML输出
XMLWriter writer=new XMLWriter(out);
writer.write(doc);
}
}
上面的是完美格式格式输出,下面是紧凑格式
OutputStream out=new FileOutputStream("D:/contact.xml");
//设置输出格式
OutputFormat format=OutputFormat.createCompactFormat();
//设置编码格式
format.setEncoding("utf-8");
//XML输出
XMLWriter writer=new XMLWriter(out,format);//format必须传入
writer.write(doc);