使用Dom4j解析XML文件

1.Document对象:整个xml文档

   Element对象:标签

   Attribute对象:属性

   Text对象:文本内容

(后三个属于Node对象)

2.步骤:

(1)去官网下载Dom4j框架:dom4j-2.1.1.jar(版本依据自己定)

(2)在项目中创建一个文件夹,lib

(3)将dom4j-2.1.1.jar文件复制到lib文件夹下

(4)在jar文件上点右键,选择Add as Library,然后点击OK

(5)在类中导包使用

3.这里先写一个xml文档 文档名叫Contacts.xml

(1)

<?xml version="1.0" encoding="UTF-8"?>
<contactList>
    <contact id="1" vip="true">
        <name>  张三   </name>
        <gender>女</gender>
        <email>panpan@itcast.cn</email>
    </contact>
    <contact id="2" vip="false">
        <name>   李四  </name>
        <gender>男</gender>
        <email>xiaozhan@itcast.cn</email>
    </contact>
    <contact id="3" vip="false">
        <name>   王五  </name>
        <gender>男</gender>
        <email>nananan@itcast.cn</email>
    </contact>
    <user>
    </user>
</contactList>

(2)一些常用的方法 :

public class Dom4jDemo1{
  @Text
  public void parseXMLDate()throws Exception{
     //1.创建一个Dom4j的解析器对象,代表了整个Dom4j框架
     SAXReader saxReader=new SAXReader();
     //2.把XML文件加载到内存中成为一个Document文档对象 有三种方式(1)
     // Document document=saxReader.read(new File("xml-app\\src\\Contacts.xml"));//这里填的是xml文件所在路径,需要模块名,Contacts.xml为xml文件名
     //(2)
     //Document document=saxReader.read(new FileInputStream("xml-app\\src\\Contacts.xml"));//这里填的是xml文件所在路径,需要模块名,Contacts.xml为xml文件名
     //(3) 注意:getResourceAsStream中的/是直接去src下寻找的文件
     InputStream is=Dom4jDemo1.class.getResourceAsStream("/Contacts.xml");
     Document document=saxReader.read(is);
     //3.获取根元素对象
     Element root=document.getRootElement();
     System.out.println(root.getName());

     //4.拿根元素下的全部子元素对象(一级)
     List<Element> sonEles1=root.elements();//取全部子元素对象
     List<Element> sonEles2=root.elements("Contact");//取全部Contact子元素对象
     for(Element sonEle:sonEles){
         System.out.println(sonEle.getName());
     }



     //拿某个子元素
     Element zEle=root.element("user");//后面输入的是所要的子元素
     System.out.println(zEle.getName());
     //假如xml文件中有多个名称相同的子元素,则默认取第一个子元素。
     Element contact=root.element("contact");//这里假设有多个contact
     //获取子元素文本
     System.out.println(contact.elementText("name");//这里打出来name对应的名称
     //获取子元素文本,并去掉前后空格
     System.out.println(contact.elementTextTrim("name");
     



     //根据元素获取属性值
     Attribute attr=contact.attribute("id");
     System.out.println(attr.getName()+"--->"+attr.getValue());
     //直接取属性值
     System.out.println(contact.attrbuteValue("id"));
     }
}
     
     

(3)下面写一个案例:解析xml中的数据成为一个List集合对象,并输出内容( 此案例需要创建一个Contact类,里面要包括姓名name,性别Gender,id,email,vip 成员变量,并且给出get set 方法,给出有参无参构造器,并且要重写toString方法 这里没有创建此类,需自己创建)

public class text{
   public void parseToList()throws Exception{
   //1.导入框架
   //2.创建SaxReader对象
   SAXReader saxReader=new SAXReader();

   //3.加载xml文件成为文档对象Document对象
   InputStream is=text.class.getResourceAsStream("/Contacts.xml");
   Document document=saxReader.read(is);

   //4.先拿根元素
   Element root=document.getRootElement();

   //5.提取contact子元素
   List<Element> contactEles=root.elements("contact");

   //6.准备一个ArrayList集合封装联系人信息
   List<Contact> contacts=new ArrayList<>();

   //7.遍历contact子元素(和第5步关联)
   for(Element contactEle:contactEles){
   //8.每个子元素都是一个联系人对象
      Contact contact=new Contact();
      contact.setId(Integer.valueOf(contactEle.attributeValue("id")));
      contact.setVip(Boolean.valueOf(contactEle.attributeValue("Vip")));
      contact.setName(contactEle.elementTextTrim("name"));
      contact.setGender(contactEle.elementTextTrim("Gender").charAt(0));
      contact.setEmail(contactEle.elementText("email"));

   //9.把联系人对象数据加入到List集合
   contacts.add(contact);

   //10.遍历List集合
   for(Contact contact:contacts){
     System.out.println(contact);
   }
}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值