publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)
throwsSAXException{
currentValue.delete(0,currentValue.length());
this.currentName=qName;
}
//这里是将之间的值加入到currentValue
publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{
currentValue.append(ch,start,length);
}
//在遇到结束后,将之前的名称和值一一对应保存在props中
publicvoidendElement(Stringuri,StringlocalName,StringqName)throwsSAXException{
props.put(qName.toLowerCase(),currentValue.toString().trim());
}
}
上面的这个解析程序比较简单吧?其实解析XML就是这么简单.
现在我们已经将dbhostdbuserdbpassword的值localhostsqlnameusernamepassword提取了出来.但是这只是在在解析器内部,我们的程序还不能访问.需要再编制一个程序.
importjava.util.Properties;
importjavax.xml.parsers.SAXParser;
importjavax.xml.parsers.SAXParserFactory;
importjava.net.URL;
publicclassParseXML{
//定义一个Properties用来存放dbhostdbuserdbpassword的值
privatePropertiesprops;
//这里的props
publicPropertiesgetProps(){
returnthis.props;
}
publicvoidparse(Stringfilename)throwsException{
//将我们的解析器对象化
ConfigParserhandler=newConfigParser();
//获取SAX工厂对象
SAXParserFactoryfactory=SAXParserFactory.newInstance();
factory.setNamespaceAware(false);
factory.setValidating(false);
//获取SAX解析
SAXParserparser=factory.newSAXParser();
//得到配置文件myenv.xml所在目录.tomcat中是在WEB-INF/classes
//下例中BeansConstants是用来存放xml文件中配置信息的类,可以自己代替或定义
URLconfURL=BeansConstants.class.getClassL
oader().getResource(filename);
try
{
//将解析器和解析对象myenv.xml联系起来,开始解析
parser.parse(confURL.toString(),handler);
//获取解析成功后的属性以后我们其他应用程序只要调用本程序的props就可以提取出属性名称和值了
props=handler.getProps();
}finally{