xml解析工具:
Sun官方jaxp工具im
jdom工具
dom4j工具:三大框架读取xml文件的程序。(非官方的,第三方的)
dom4j工具使用:
1)到dom4j的官方下载 。dom4j-1.6.1.zip
2 )导入dom4j的支持jar包、dom4j-1.6.1.jar核心包
dom4j常用方法:
查:
- 标签:element("name")
elements("name")
elements();
getName() 标签名称
getRootElement(): 根标签 - 属性: atrributeValue("name") 属性值
atrribute("name") 对象
atrributes() 属性对象列表
getValue() 属性值 - 文本:
getText(); 当前标签的文本
elementText("name") 子标签的文本
增:
DocumentHelper.createDocument() 文档
addElement("name"); 标签
addAtribute("name","value" ) 属性</br>
改:
setValue() 修改属性值
addAttribute(”同名“) 修改属性值
setText() 修改文本内容</br>
删除:
detach() 标签、属性
getParent().remove(标签/属性)
xml的解析:
xml文件(注意,xml文本默认就是字符串,所以没有必要写"")
<?xml version="1.0" encoding="utf-8"?>
<contact_list>
<contact id="01">
<name>丁昌江</name>
<email>1137975808@qq.com</email>
<tel>13247842137</tel>
<address>贵州黔东南</address>
这是一首简单的小情歌
</contact>
<contact id="02">
<name>熊尚旭</name>
<email>14234342324@qq.com</email>
<tel>13247823231</tel>
<address>江西南昌</address>
</contact>
</contact_list>
public class demo01 {
public static void main(String[] args) throws DocumentException {
//----------获取document
SAXReader saxReader = new SAXReader();
SAXReader reader = new SAXReader();
Document document = reader.read("./src/contact.xml");
//:---------获取标签
//->获取根元素
Element rootElem = document.getRootElement();
System.out.println(rootElem.getName());
//->获取根元素的第一个子标签(根据指定的标签名)
Element elem = rootElem.element("contact");
//->获取所有标签
List<Element>list = rootElem.elements();
Iterator <Element> it = list.iterator();
while(it.hasNext()){
System.out.println(it.next().getName());//获取属性名
}
/*
* 要想获取孙标签,一定要先获取子标签,然后通过子标签去获取孙标签
*/
//:--------获取标签属性和值
//->获取指定标签属性(根据标签属性名确定)
Attribute attr = elem.attribute("id");
elem.attributeValue("id")//获取属性值(根据指定属性)
//->获取标签所有属性
List<Attribute> attrList = elem.attributes();
for(int i=0;i<attrList.size();i++){
Attribute attribute = attrList.get(i);
System.out.println(attribute.getName()+":"+attribute.getValue());//获取属名和值
}
//:--------获取标签的文本
System.out.println(elem.getText());
/**
* 注意:
* 在xml文件中,空格和换行会作为xml的内容被解析到。
* xml中空格和换行和java代码中空格换行不一样。
* java代码中的空格和换行是没意义的,为了代码的格式格式好看而已。
*/
//->先获取子标签再获取子标签的文本
Element subElem = (Element) elem.element("name");
System.out.println(subElem.getText());
//->直接通过子标签名称获取子标签文本
System.out.println(elem.elementText("address"));
}
}
练习:xml转模型
class Contact{
private String id;
private String name;
private int age;
private String sex;
private String tel;
private String email;
private String address;
public String getId(){
return id;
}
public void setId(String id){
this.id=id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getTel() {
return tel;
}
public void setTel(String tel) {
this.tel = tel;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
@Override
public String toString() {
// TODO Auto-generated method stub
return "\nid:"+this.id+" 姓名:"+this.name+" 年龄:"+this.age+" 性别:"+this.sex+" 电话:"+this.tel+" 地址:"+this.address;
}
}
public class demo02 {
public static void main(String[] args) throws DocumentException {
SAXReader reader = new SAXReader();
Document document = reader.read(new File("./src/contact.xml"));
Element rootElem = document.getRootElement();
List <Element> list = rootElem.elements();
List <Contact> contactList = new ArrayList<Contact>();
for(Element elem :list){
Contact contact = new Contact();
contact.setId(elem.attributeValue("id"));
contact.setName(elem.elementText("name"));
contact.setAge(Integer.parseInt(elem.elementText("age")));
contact.setSex(elem.elementText("sex"));
contact.setTel((elem.elementText("tel")));
contact.setEmail(elem.elementText("email"));
contact.setAddress(elem.elementText("address"));
contactList.add(contact);
}
for(Contact contact :contactList){
System.out.println(contact);
}
}
}
注意:
dom4j的解析是dom方式,即使其里面使用的类含有sax;
SAXReader reader = new SAXReader();