|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
手机用到的是用j2me所编出来的小程序。xmlXML设置文件的读取处置
板桥里人jdon.com2002/2
Java和XML是黄金组合,网上已有良多文章先容,XML作为电子商务中数据互换,已有其不成替换的感化,可是在平常体系开辟中,我们纷歧建都用到数据互换,是否是没法利用XML了?
固然不是,如今已有一个新趋向,java程序的设置文件都入手下手利用XML格局,之前是利用相似windows的INI格局.(Java中也有Propertiesy如许的类专门处置如许的属性设置文件).利用XML作为Java的设置文件有良多优点,从Tomcat的安拆卸置文件和J2ee的设置文件中,我们已看到XML的广泛使用,让我们也跟从盛行趋向用XML武装起来.
如今关头是怎样读取XML设置文件?有好几种XML剖析器:次要有DOM和SAX,这些区分网上文章先容良多.
在apache的XML项目组中,今朝有XercesXalanCocoon几个开辟XML相干手艺的project.Tomcat自己利用的是Sun的JAXP,而其XSLTaglibproject中利用Xerces剖析器.
好了,下面都是对照烦人的实际成绩,仍是从速切进XML的设置文件的读取吧.
在我们的程序中,一般要有一些依据主机情况断定的变量.好比数据库会见用户名和暗码,分歧的主机大概设置纷歧样.只需变动XML设置文件,就能够一般运转.
<myenv>
<datasource>
<dbhost>localhost</dbhost>
<dbname>sqlname</dbname>
<dbuser>username</dbuser>
<dbpassword>password</dbpassword>
</datasource>
</myenv>
下面这个myenv.xml设置文件通常为放在tomcat的WEB-INF/classes目次下.
我们体例一个Java程序间接读取,将dbhostdbuserdbpassword提掏出来供其他程序会见数据库用.
今朝利用SAX对照的多,与DOM次要区分是SAX是一行一行读取XML文件举行剖析,合适对照年夜文件,DOM是一次性读进内存,明显不克不及凑合年夜文件.这里我们利用SAX剖析,因为SAX剖析器不休在开展,网上有很多文章是针对老版本的.假如你利用JDK1.4,能够参考利用SAX处置XML文档一文.这里的程序是依据其改善而且经由理论调试得来的.
对下面myenv.xml读取的Java程序:
importorg.xml.sax.Attributes;
importorg.xml.sax.helpers.DefaultHandler;
importorg.xml.sax.SAXException;
importjava.util.Properties;
//利用DefaultHandler的优点是不用摆设出一切办法,
publicclassConfigParserextendsDefaultHandler{
////界说一个Properties用来寄存dbhostdbuserdbpassword的值
privatePropertiesprops;
privateStringcurrentSet;
privateStringcurrentName;
privateStringBuffercurrentValue=newStringBuffer();
//构建器初始化props
publicConfigParser(){
this.props=newProperties();
}
publicPropertiesgetProps(){
returnthis.props;
}
//界说入手下手剖析元素的办法.这里是将<xxx>中的称号xxx提掏出来.
publicvoidstartElement(Stringuri,StringlocalName,StringqName,Attributesattributes)
throwsSAXException{
currentValue.delete(0,currentValue.length());
this.currentName=qName;
}
//这里是将<xxx></xxx>之间的值到场到currentValue
publicvoidcharacters(char[]ch,intstart,intlength)throwsSAXException{
currentValue.append(ch,start,length);
}
//在碰到</xxx>停止后,将之前的称号和值逐一对应保留在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.getClassLoader().getResource(filename);
try
{
//将剖析器息争析对象myenv.xml接洽起来,入手下手剖析
parser.parse(confURL.toString(),handler);
//猎取剖析乐成后的属性今后我们其他使用程序只需挪用本程序的props就能够提掏出属性称号和值了
props=handler.getProps();
}finally{
factory=null;
parser=null;
handler=null;
}
}
}
因为我们的XML文件是利用最复杂的情势,因而剖析器绝对复杂,可是这已充足凑合我们的设置文件了.
判别一个程序体系的先辈性,我们先看看他的设置文件,假如还在利用老套的xxx=123如许相似.ini的文件,
我们大概会轻轻一笑,他又后进了.....
如果你学习的是市场营销,是销售,也许参加大课堂的学习会更合适,因为你的工作能力中有个基础就是搭建自己的人脉, |
|