xml文件解析;我们在这里使用的时dom4j的document和SAXReader和element完成xml解析案例;
找到一个xml文件内容;
<?xml version="1.0" encoding="UTF-8"?>
<update version="1.0">
<packages>
<package>
<softwaretype>APP</softwaretype>
<version>1.0</version>
<filename>app.zip</filename>
<pki>xxxxxxxxx</pki>
<path>xxxxxxx</path>
</package>
<package>
<softwaretype>MM Middleware</softwaretype>
<version></version>
<filename>Middleware.zip</filename>
<pki>xxxxxxxxx</pki>
<path>xxxxxxxxxx</path>
</package>
<packages/>
<description>
<softwareInfoType>app</softwareInfoType>
<show>
<info>XXX</info>
<info>XXX</info>
<info>XXX</info>
</show>
<description/>
<update/>
这是xml文件内容我们需要读取里面的参数内容;
public class XmlAnalysis{
public static Update readXml(InputStream in){
Update update = null;//为每个节点设置get/set方法合理分配节点(通常有数据的节点为根节点)
SAXReader reader = new SAXReader();
Document doc = null;
try {
doc = reader.read(in);
update = parsUpdate(doc);
} catch (Exception e) {
}
return update;
}
}
private static Update parsUpdate(Document doc) throws Exception {
Update update = new Update();
if(doc.selectNodes("update").size() > 0) {//更具节点名获取长度,看是否为空
Element eleupdate = (Element)doc.selectNodes("update").get(0);//通过节点名获取数据;
String version = eleupdate.attributeValue("version");
update.setVersion(version);
}
if(doc.selectNodes("update/packages/package").size() > 0){//更具分节点找到有数据的节点上
List<Element> elepackages = doc.selectNodes("update/packages/package");//获取数据.这里有多个相同节点数据返回就是list集合;
List<Package> packages = new ArrayList<Package>();//节点实体类
for (Element elepackage : elepackages) {//遍历出来放入对应的实体类;
Package ipackage = parsePackage(elepackage);
packages.add(ipackage);
}
update.setPackages(packages);
}
if(doc.selectNodes("update/description/softwareInfoType").size() > 0) {
Element elesoftwareInfoType = (Element)doc.selectNodes("update/description/softwareInfoType").get(0);
update.setSoftwareInfoType(elesoftwareInfoType.getTextTrim());
}
if(doc.selectNodes("update/description/show/info").size() > 0) {
List<Element> eleinfo = doc.selectNodes("update/description/show/info");
StringBuffer show = new StringBuffer();
for (Element elem : eleinfo) {
show.append(elem.getTextTrim()).append("\n");
}
update.setShow(show.toString());
}
if(doc.selectNodes("update/description/detail").size() > 0) {
Element eledetail = (Element)doc.selectNodes("update/description/detail").get(0);
update.setDetail(eledetail.getTextTrim());
}
if(doc.selectNodes("update/description/releaseNote").size() > 0) {
Element elereleaseNote = (Element)doc.selectNodes("update/description/releaseNote").get(0);
update.setReleaseNote(elereleaseNote.getTextTrim());
}
return update;
}
private static Package parsePackage(Element ele) throws Exception {
Package ipackage = new Package();
if(ele.selectNodes("./softwaretype").size() > 0) {
Element elesoftwaretype = (Element)ele.selectNodes("./softwaretype").get(0);
ipackage.setSoftwaretype(elesoftwaretype.getTextTrim());
}
if (ele.selectNodes("./version").size() > 0) {
Element eleversion = (Element)ele.selectNodes("./version").get(0);
ipackage.setVersion(eleversion.getTextTrim());
}
if (ele.selectNodes("./filename").size() > 0) {
Element elefilename = (Element)ele.selectNodes("./filename").get(0);
ipackage.setFilename(elefilename.getTextTrim());
}
if (ele.selectNodes("./filename").size() > 0) {
Element elepki = (Element)ele.selectNodes("./pki").get(0);
ipackage.setPki(elepki.getTextTrim());
}
if (ele.selectNodes("./path").size() > 0) {
Element elepath = (Element)ele.selectNodes("./path").get(0);
ipackage.setPath(elepath.getTextTrim());
}
List<File> file = new ArrayList<File>();
if (ele.selectNodes("./files/file").size() > 0) {
List<Element> elefiles = ele.selectNodes("./files/file");
for(Element elefile : elefiles) {
File ifile = parseFile(elefile);
file.add(ifile);
}
}
ipackage.setFiles(file);
return ipackage;
}
}
好写一个main方法然后将文件流传进去测试
public static void main(String[] args){
readXml(xml的文件流);
}
完成一个xml文件解析案例;