Web项目中解析XML文件

来源:互联网 发布:现在淘宝代销好做吗 编辑:程序博客网 时间:2024/06/15 12:21
           据说Java中解析xml文件有3种方式,可惜本人一种也不会。在网上查询了大量的资料,但大多数都是在Java Project下进行的,本人也解析成功了。但是用eclipse或MyEclipse创建的Java Web工程与Java Project工程有那么一些区别。其中一点就是Java Project工程下没有WebRoot根目录,而Java Web工程下有WebRoot根目录,Java编译后的class文件被默认放在WEB-INF/classes下,这就让我不知道在普通类中咋获得服务器根路径,要知道服务器下是没有“WebRoot”这一路径的,为这个我郁闷了好久。不过在松哥的指点下,还是解决了这个问题,在此表示感谢。

--->点击阅读更多    

       好了,言归正传,先看一个xml文件mailConfig.xml:


[html] view plaincopyprint?
  1. <?xml version="1.0"encoding="UTF-8"?>  
  2. <content>  
  3.     <mail>  
  4.        <mailServerHost>smtp.163.com</mailServerHost>  
  5.        <mailServerPort>25</mailServerPort>  
  6.        <validate>true</validate>  
  7.        <userName>lindf123of@163.com</userName>  
  8.        <password>*********</password>  
  9.        <fromAddress>lindf123of@163.com</fromAddress>  
  10.     </mail>  
  11. </content>  


     所在的路径如下所示:




      开始解析xml文件,新建一个Java类XMLUtil.java,代码如下所示:

 

[java] view plaincopyprint?
  1. package com.ldfsoft.util;  
  2.   
  3. import java.io.File;  
  4. import java.io.IOException;  
  5.   
  6. import javax.xml.parsers.DocumentBuilder;  
  7. import javax.xml.parsers.DocumentBuilderFactory;  
  8. import javax.xml.parsers.ParserConfigurationException;  
  9.   
  10. import org.w3c.dom.Document;  
  11. import org.w3c.dom.Element;  
  12. import org.w3c.dom.NodeList;  
  13. import org.xml.sax.SAXException;  
  14. import com.ldfsoft.dto.MailSenderDto;  
  15.   
  16. public class XMLUtil {  
  17.     private MailSenderDto mailSenderInfoDto;  
  18.     public  MailSenderDto getMailMess(String nodeName,String fileName){  
  19.         DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();  
  20.         String path = this.getClass().getClassLoader().getResource("xml").getPath();  //获得存放mailConfig.xml文件的xml目录  
  21.         mailSenderInfoDto=new MailSenderDto();  
  22.         try {  
  23.             DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();  
  24.             Document document=documentBuilder.parse(path+File.separator+fileName);  
  25.             NodeList nodeList=document.getElementsByTagName(nodeName);  
  26.             if(nodeList.getLength()>0){  
  27.                 Element element=(Element) nodeList.item(0);  
  28.                 mailSenderInfoDto.setMailServerHost(element.getElementsByTagName("mailServerHost").item(0).getFirstChild().getNodeValue());  
  29.                 mailSenderInfoDto.setMailServerPort(element.getElementsByTagName("mailServerPort").item(0).getFirstChild().getNodeValue());  
  30.                 mailSenderInfoDto.setValidate(Boolean.valueOf(element.getElementsByTagName("validate").item(0).getFirstChild().getNodeValue()));    //注意String类型转boolean类型的方法  
  31.   
  32.                 mailSenderInfoDto.setUserName((element.getElementsByTagName("userName").item(0).getFirstChild().getNodeValue()));  
  33.                 mailSenderInfoDto.setPassword(element.getElementsByTagName("password").item(0).getFirstChild().getNodeValue());  
  34.                 mailSenderInfoDto.setFromAddress(element.getElementsByTagName("fromAddress").item(0).getFirstChild().getNodeValue());     
  35.             }     
  36.         } catch (ParserConfigurationException e) {  
  37.             // TODO Auto-generated catch block  
  38.             e.printStackTrace();  
  39.         } catch (SAXException e) {  
  40.             // TODO Auto-generated catch block  
  41.             e.printStackTrace();  
  42.         } catch (IOException e) {  
  43.             // TODO Auto-generated catch block  
  44.             e.printStackTrace();  
  45.         }  
  46.         return mailSenderInfoDto;  
  47.     }  
  48.   
  49. }  

        MailSenderDto为上一篇文章( Java学习笔记(1)----Java中发送邮件)的dto,在本文中省略。这个类中的getMailMess(StringnodeName,String fileName)有两个参数,其中nodeName为节点名,fileName为这个xml文件的文件名,将获取的数据封装到MailSenderDto的一个实例中并返回。

 

          我们接着在JavaUtil.java类中用如下形式代替上篇文章这个类的此方法,部分代码如下所示:

 

    

[java] view plaincopyprint?
  1. /** 
  2.      * 发送激活账户邮件 
  3.      */  
  4.      
  5.     public void sendEmail(String email) {  
  6.        mailSenderDto=xmlUtil.getMailMess("mail""mailConfig.xml");  
  7.        try{  
  8.              String mailTitle="【我的网盘】账号激活邮件";  
  9.              StringmailContent="<br><br>亲爱的【我的网盘】用户:<br><br>"+  
  10.                             "    您好!感谢您注册【我的网盘】帐号,点击下面的链接即可完成注册:<br><br>"+  
  11.                             "    <ahref=\"http://localhost:9080/mydisk/swf/activateEmail.html#email="+email+"\">http://localhost:9080/mydisk/swf/activateEmail.html#email="+email+"</a><br><br>"+  
  12.                             "    (如果链接无法点击,请将它复制并粘贴到浏览器的地址栏中访问)<br><br>"+  
  13.                             "    您的Email:"+email+"<br><br>"+  
  14.                             "    Email可以作为您的帐号来登录【我的网盘】。<br><br>"+  
  15.                             "    本邮件是系统自动发送的,请勿直接回复!感谢您的访问,祝您使用愉快!<br><br>";  
  16.             
  17.              mailSenderDto.setToAddress(email);      //收件人邮箱地址  
  18.              mailSenderDto.setSubject(mailTitle);    //邮件标题  
  19.              mailSenderDto.setContent(mailContent);  //邮件内容  
  20.              //这个类主要用来发送邮件    
  21.              MailSender ms = new MailSender();    
  22.              ms.sendHtmlMail(mailSenderDto);//发送html格式    
  23.              System.out.println("---------------发送成功!");  
  24.        }catch(Exception e){  
  25.            System.out.println("失败了!");  
  26.        }  
  27.     }    

    经过测试,是一样的效果。只是这样大大减少了发送mail属性与代码的耦合性,方便管理。其实更主要的是让我学到了怎么解析xml文件。


原创粉丝点击