微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Sax读取XML文件

readxmlUtil.java

packageorg.apache.list.util;

importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileNotFoundException;
importjava.io.IOException;
importjava.util.HashMap;
importjava.util.List;

importjavax.xml.parsers.ParserConfigurationException;
importjavax.xml.parsers.SAXParser;
importjavax.xml.parsers.SAXParserFactory;

importorg.xml.sax.SAXException;
publicclassreadxmlUtil{
/**
*匹配文件
*/
privatestaticfinalStringFILE_TYPE="xml";

/**
*用Sax读取xml文件
*
*@paramfileName
*文件名
*@paramnodeName
*标示符
*@return
*读取的内容
*@throwsException
*/
publicstaticList<HashMap<String,String>>readxmlInfo(StringfileName,StringnodeName)
throwsException{

//文件为空的情况下
if(fileName==null||fileName.length()==0){
returnnull;
}

//不是XML文件的情况下
if(!fileName.endsWith(FILE_TYPE)){
returnnull;
}

//文件是否存在和文件夹判断
FilefileInfo=newFile(fileName);
if(!fileInfo.exists()){
returnnull;
}
if(fileInfo.isDirectory()){
returnnull;
}

//获得文件输入流
FileInputStreamfs=newFileInputStream(newFile(fileName));

try{
SAXParserFactoryspf=SAXParserFactory.newInstance();
SAXParserparser=spf.newSAXParser();
SaxHandlerhandler=newSaxHandler(nodeName);
parser.parse(fs,handler);
fs.close();
returnhandler.getList();
}catch(ParserConfigurationExceptione){
//TodoAuto-generatedcatchblock
e.printstacktrace();
}catch(SAXExceptione){
//TodoAuto-generatedcatchblock
e.printstacktrace();
}catch(IOExceptione){
//TodoAuto-generatedcatchblock
e.printstacktrace();
}
returnnull;
}

publicstaticvoidmain(String[]args)throwsException{
try{
List<HashMap<String,String>>list=readxmlInfo("src/itcast.xml","person");
for(HashMap<String,String>p:list){
System.out.println(p.toString());
}
}catch(FileNotFoundExceptione){
//TodoAuto-generatedcatchblock
e.printstacktrace();
}
}
}

SaxHandler.java

packageorg.apache.list.util;

importjava.util.ArrayList;
importjava.util.HashMap;
importjava.util.List;

importorg.xml.sax.Attributes;
importorg.xml.sax.SAXException;
importorg.xml.sax.helpers.DefaultHandler;

publicclassSaxHandlerextendsDefaultHandler{
/**
*三级标签
*/
privateHashMap<String,String>map=null;
/**
*二级标签
*/
privateList<HashMap<String,String>>list=null;
/**
*正在解析的元素的标签
*/
privateStringcurrentTag=null;
/**
*正在解析的元素的值
*/
privateStringcurrentValue=null;

privateStringnodeName=null;

publicList<HashMap<String,String>>getList(){
returnlist;
}

publicSaxHandler(StringnodeName){
this.nodeName=nodeName;
}

/**
*当读到一个开始标签的时候,会触发这个方法
*/
publicvoidstartDocument()throwsSAXException{
list=newArrayList<HashMap<String,String>>();
}

/**
*当遇到文档的开头的时候,调用这个方法
*/
publicvoidstartElement(Stringuri,StringlocalName,Stringname,Attributesattributes)
throwsSAXException{
if(name.equals(nodeName)){
map=newHashMap<String,String>();
}
if(attributes!=null&&map!=null){
for(inti=0;i<attributes.getLength();i++){
map.put(attributes.getQName(i),attributes.getValue(i));
}
}
currentTag=name;
}

/**
*这个方法用来处理在XML文件中读到的内容
*/
publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{
if(currentTag!=null&&map!=null){
currentValue=newString(ch,start,length);
if(currentValue!=null&&!currentValue.trim().equals("")
&&!currentValue.trim().equals("\n")){
map.put(currentTag,currentValue);
}
}
currentTag=null;
currentValue=null;
}

/**
*在遇到结束标签的时候,调用这个方法
*/
publicvoidendElement(Stringuri,Stringname)throwsSAXException{
if(name.equals(nodeName)){
list.add(map);
map=null;
}
super.endElement(uri,localName,name);
}

}

itcast.xml

<?xmlversion="1.0"encoding="UTF-8"?>
<persons>
<personid="23">
<name>zhangsan</name>
<age>30</age>
</person>
<personid="20">
<name>lisi</name>
<age>25</age>
</person>
</persons>

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


php输出xml格式字符串
J2ME Mobile 3D入门教程系列文章之一
XML轻松学习手册
XML入门的常见问题(一)
XML入门的常见问题(三)
XML轻松学习手册(2)XML概念
xml文件介绍及使用
xml编程(一)-xml语法
XML文件结构和基本语法
第2章 包装类