使用JDOM解析XML文件
?
附件为相应的代码及配置文件
?
1、使用的jar包: jdom.jar? xerces.jar? log4j-1.2.8.jar
?
2、log4j.properties
#error/warn/info/debug# log4j.rootLogger=warn, stdout#log4j.rootLogger=warn, stdout, file #to console# log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.out log4j.appender.stdout.layout=org.apache.log4j.PatternLayout #log4j.appender.stdout.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %l - %m%n log4j.appender.stdout.layout.ConversionPattern=%r %d{yyyy-MM-dd HH:mm:ss} [%p] -%l -%n -%m%n log4j.logger.java.sql.Connection=debug log4j.logger.java.sql.Statement=debug log4j.logger.java.sql.PreparedStatement=DEBUG #to file# # 文件大小到达指定尺寸的时候产生新文件 #log4j.appender.file=org.apache.log4j.RollingFileAppender #log4j.appender.file.Append=true #log4j.appender.R.Threshold=info #log4j.appender.file.File=${webApp.root}/WEB-INF/logs/app.log # #log4j.appender.file.MaxFileSize=1024KB #log4j.appender.file.MaxBackupIndex=100 #log4j.appender.file.layout=org.apache.log4j.PatternLayout #log4j.appender.file.layout.ConversionPattern=%r %d{yyyy-MM-dd HH:mm:ss} [%p] -%l -%n -%m%n # 那些包路径需要打印日志 log4j.category.com.java=debug #log4j.category.com.iss.test=debug?
3、sms.xml
<?xml version="1.0" encoding="UTF-8"?><req><sp_id>qidi</sp_id><sp_pwd>qidi123</sp_pwd><phone>15902843301</phone><content>短信内容</content><time_stamp>201203281726</time_stamp><sender>106586282010</sender><serviceId>family</serviceId></req>
?
4、实体类
/** * @ClassName: SMSBean * @Description: 短信内容 * @author * @date 2012-5-9 上午9:37:17 * @version V1.0 */public class SMSBean {/** 服务提供商ID */private String spID;/** 服务提供商密码 */private String spPWD;/** 下发手机号(发送人手机号) */private String phone;/** 短信内容 */private String content;/** 下发时间(yyyyMMddHHmmss) */private String timeStamp;/** 下发端口 */private String sendPort;/** 业务代码 */private String serviceID;// 省略getter/setter 方法}?
?
5、解析方法
import java.io.BufferedReader;import java.io.InputStream;import java.io.InputStreamReader;import java.io.UnsupportedEncodingException;import org.apache.log4j.Logger;import org.jdom.Document;import org.jdom.Element;import org.jdom.JDOMException;import org.jdom.input.SAXBuilder;/** * @ClassName: XMLMethods * @Description: XML文件操作类 * @author * @date 2012-5-9 上午9:36:23 * @version V1.0 */public final class XMLMethods {private static final Logger LOG = Logger.getLogger(XMLMethods.class);private XMLMethods() {}/** xml文件存放路径 */private static final String SMS_XML_PATH = "sms.xml";/** * @Title: readSMSXML * @Description: 使用jdom解析XML * @return SMSBean * @author * @date 2012-5-9 */public static SMSBean readSMSXML() {InputStreamReader isr = null;try {// 获取要读取的文件的输入流InputStream is = XMLMethods.class.getClassLoader().getResourceAsStream(SMS_XML_PATH);/** 为防止乱码,使用 UTF-8 进行编码 */isr = new InputStreamReader(is, "UTF-8");} catch (UnsupportedEncodingException e) {LOG.error("unsupport UTF-8 encoding!", e);} catch (Exception e) {LOG.error("occur others Exception!", e);}// 使用字符缓冲读取BufferedReader bufferReader = new BufferedReader(isr);// 使用JDOM的SAXBuilder解析器SAXBuilder builder = new SAXBuilder();Document doc = null;try {// 构建一个JDOM的Documentdoc = builder.build(bufferReader);} catch (JDOMException e) {LOG.error("create Document faile!", e);} catch (Exception e) {LOG.error("occur others Exception!", e);}// 根元素Element root = doc.getRootElement();// 短信内容实体类SMSBean sms = new SMSBean();/** 获取xml文件中的元素 */Element spID = root.getChild("sp_id");if (null != spID) {sms.setSpID(spID.getTextTrim());}Element spPWD = root.getChild("sp_pwd");if (null != spPWD) {sms.setSpPWD(spPWD.getTextTrim());}Element phone = root.getChild("phone");if (null != phone) {sms.setPhone(phone.getTextTrim());}Element content = root.getChild("content");if (null != content) {sms.setContent(content.getTextTrim());}Element timeStamp = root.getChild("time_stamp");if (null != timeStamp) {sms.setTimeStamp(timeStamp.getTextTrim());}Element sendPort = root.getChild("sender");if (null != sendPort) {sms.setSendPort(sendPort.getTextTrim());}Element serviceID = root.getChild("serviceId");if (null != serviceID) {sms.setServiceID(serviceID.getTextTrim());}return sms;}}?
?
6、测试方法
public static void main(String[] args) {SMSBean sms = readSMSXML();if (null != sms) {System.out.println(sms.getSpID());System.out.println(sms.getSpPWD());System.out.println(sms.getPhone());System.out.println(sms.getContent());System.out.println(sms.getTimeStamp());System.out.println(sms.getSendPort());System.out.println(sms.getServiceID());} else {System.out.println("read "+SMS_XML_PATH+" faile!");}}?
7、测试结果
qidiqidi12315902843301短信内容201203281726106586282010family?