自动更新--解析xml文件(1)

1. 解析xml文档

1.1 根据字符串类型的文件名字解析xml文件

/*
	 * 解析xml文件
	 * xml文件实例如下:
	 <?xml version="1.0" encoding="utf-8"?>
	 <employees> 
		<employee> 
			<name>ddviplinux</name> 
			<sex>m</sex> 
			<age>30</age> 
		</employee> 
		<employee> 
			<name>李路</name> 
			<sex>女</sex> 
			<age>20</age> 
		</employee>
	 </employees>
	 * */
	public  void parseXml(String fileName) {
		try { 
			DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); 
			DocumentBuilder db = dbf.newDocumentBuilder(); 
			Document document = db.parse(fileName); 
			NodeList employees = ((Node) document).getChildNodes(); 
			//System.out.println(employees.getLength());//length = 1  代表标签<employees>
			for (int i = 0; i < employees.getLength(); i++) { 
				Node employee = employees.item(i); 
				NodeList employeeInfo = employee.getChildNodes(); 
				//System.out.println(employeeInfo.getLength()); 
				//length = 5 代表标签<employee> </employee> <employee> </employee> </employees> 
				for (int j = 0; j < employeeInfo.getLength(); j++) { 
					if(j%2 == 0) continue; //在执行到标签</employee>的时候才能读取<employee> </employee>中间的数据
					Node node = employeeInfo.item(j); 
					NodeList employeeMeta = node.getChildNodes(); 
					//System.out.println(j+" "+employeeMeta.getLength()); 
					//length = 7 代表标签 <name> </name> <sex> </sex> <age> </age> </employee>
					for (int k = 0; k < employeeMeta.getLength(); k++) { 
						if(k%2 == 0) continue; //在执行到标签</name>的时候能读取<name> </name>中间的数据 下面的性别和年龄同上。
						System.out.println(employeeMeta.item(k).getNodeName() + ":" + employeeMeta.item(k).getTextContent()); 
					} 
				}
			}
			System.out.println("解析完毕"); 
		} catch (FileNotFoundException e) { 
			System.out.println(e.getMessage()); 
		} catch (ParserConfigurationException e) { 
			System.out.println(e.getMessage()); 
		} catch (SAXException e) { 
			System.out.println(e.getMessage());
		} catch (IOException e) { 
			System.out.println(e.getMessage()); 
		} 	
	}


 

1.2 根据数据流解析xml文件到HashMap

/*
 * xml文件示例
 * <?xml version="1.0" encoding="utf-8"?>
	<update>
	    <version>1.7</version>
	    <name>CerClient</name>
	    <url>http://gdown.baidu.com/data/wisegame/f98d235e39e29031/baiduxinwen.apk</url>
	</update>

 * */
public class ParseXmlService {
	public HashMap<String, String> parseXml(InputStream inStream) throws Exception
    {
        HashMap<String, String> hashMap = new HashMap<String, String>();
        
        // 实例化一个文档构建器工厂
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        // 通过文档构建器工厂获取一个文档构建器
        DocumentBuilder builder = factory.newDocumentBuilder();
        // 通过文档通过文档构建器构建一个文档实例
        Document document = builder.parse(inStream);
        //获取XML文件根节点
        Element root = document.getDocumentElement();
        //获得所有子节点
        NodeList childNodes = root.getChildNodes();
        for (int j = 0; j < childNodes.getLength(); j++)
        {
            //遍历子节点
            Node childNode = (Node) childNodes.item(j);
            if (childNode.getNodeType() == Node.ELEMENT_NODE)
            {
                Element childElement = (Element) childNode;
                //版本号
                if ("version".equals(childElement.getNodeName()))
                {
                    hashMap.put("version",childElement.getFirstChild().getNodeValue());
                }
                //软件名称
                else if (("name".equals(childElement.getNodeName())))
                {
                    hashMap.put("name",childElement.getFirstChild().getNodeValue());
                }
                //下载地址
                else if (("url".equals(childElement.getNodeName())))
                {
                    hashMap.put("url",childElement.getFirstChild().getNodeValue());
                }
            }
        }
        return hashMap;
    }

}


 参考网址:

1.http://developer.51cto.com/art/200903/117512.htm

2.http://www.cnblogs.com/coolszy/archive/2012/04/27/2474279.html

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值