Java学习笔记(2)----Web项目中解析XML文件(一)

2014-11-24 09:12:21 · 作者: · 浏览: 2


据说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]
< xml version="1.0"encoding="UTF-8" >


smtp.163.com
25
true
lindf123of@163.com
*********
lindf123of@163.com


所在的路径如下所示:

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

[java]
package com.ldfsoft.util;

import java.io.File;
import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;

import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.ldfsoft.dto.MailSenderDto;

public class XMLUtil {
private MailSenderDto mailSenderInfoDto;
public MailSenderDto getMailMess(String nodeName,String fileName){
DocumentBuilderFactory documentBuilderFactory=DocumentBuilderFactory.newInstance();
String path = this.getClass().getClassLoader().getResource("xml").getPath(); //获得存放mailConfig.xml文件的xml目录
mailSenderInfoDto=new MailSenderDto();
try {
DocumentBuilder documentBuilder=documentBuilderFactory.newDocumentBuilder();
Document document=documentBuilder.parse(path+File.separator+fileName);
NodeList nodeList=document.getElementsByTagName(nodeName);
if(nodeList.getLength()>0){
Element element=(Element) nodeList.item(0);
mailSenderInfoDto.setMailServerHost(element.getElementsByTagName("mailServerHost").item(0).getFirstChild().getNodeva lue());
mailSenderInfoDto.setMailServerPort(element.getElementsByTagName("mailServerPort").item(0).getFirstChild().getNodeva lue());
mailSenderInfoDto.setValidate(Boolean.valueOf(element.getElementsByTagName("validate").item(0).getFirstChild().getNodeva lue())); //注意String类型转boolean类型的方法

mailSenderInfoDto.setUserName((element.getElementsByTagName("userName").item(0).getFirstChild().getNodeva lue()));
mailSenderInfoDto.setPassword(element.getElementsByTagName("password").item(0).getFirstChild().getNodeva lue());
mailSenderInfoDto.setFromAddress(element.getElementsByTagName("fromAddress").item(0).getFirstChild().getNodeva lue());
}
} catch (ParserConfigurationException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SAXException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return mailSenderInfoDto;
}

}

MailSenderDto为上一篇文章( Java学习笔记(1)----Java中发送邮件)的dto,在本文中省略。这个类中的getMailMess(StringnodeName,String fileName)有两个参数,其中nodeName为节点