XML文件解析;

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文件解析案例;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值