java 以dom方式解析xml

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/coolcoffee168/article/details/48803149
【DOM(Document Object Model) 】

由W3C提供的接口,它将整个XML文档读入内存,构建一个DOM树来对各个节点(Node)进行操作。


下面是具体的代码实现:

	/**
	 * 解析发送短信返回的XML信息
	 * 
	 * @param returnMsg - xml格式
	 * @return
	 */
	private List<SMSReturnResultMsg> parseSendReturnXml(String xmlMsg) throws Exception{
		SMSReturnResultMsg smsReturnMsgDto = null;
		List<SMSReturnResultMsg> resultList = new ArrayList<SMSReturnResultMsg>();
		
		try{
			InputStream is = new ByteArrayInputStream(xmlMsg.getBytes("UTF-8"));

			DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
			DocumentBuilder docBuilder = factory.newDocumentBuilder();

			Document doc = docBuilder.parse(is);
			Element root = doc.getDocumentElement();
			//获取属性指定属性值
			String name = root.getAttribute("name");
			String resultMsg = SMSUtils.getSMSReturnStatusMsg(Integer.valueOf(root.getAttribute("result")));
			//获取子元素
			NodeList  childNode = root.getChildNodes();
			if(childNode != null && childNode.getLength() > 0){//子元素存在
				for(int i = 0; i < childNode.getLength(); i ++){
					smsReturnMsgDto = new SMSReturnResultMsg();		
					smsReturnMsgDto.setActionName(name);//actionName
					smsReturnMsgDto.setReturnStatus(resultMsg);//returnStatus
					smsReturnMsgDto.setCid(childNode.item(i).getAttributes().getNamedItem("cid").getNodeValue());//cid
					smsReturnMsgDto.setSid(childNode.item(i).getAttributes().getNamedItem("sid").getNodeValue());//sid
					smsReturnMsgDto.setMsgid(childNode.item(i).getAttributes().getNamedItem("msgid").getNodeValue());//msgid
					smsReturnMsgDto.setSmsTotal(childNode.item(i).getAttributes().getNamedItem("total").getNodeValue());//smsTotal
					smsReturnMsgDto.setUnitPrice(childNode.item(i).getAttributes().getNamedItem("price").getNodeValue());//unitFee
					smsReturnMsgDto.setCurrentRemain(childNode.item(i).getAttributes().getNamedItem("remain").getNodeValue());//currentRemain
					
					resultList.add(smsReturnMsgDto);
				}
			}else{//子元素不存在将根元素返回
				smsReturnMsgDto = new SMSReturnResultMsg();			
				smsReturnMsgDto.setActionName(name);//actionName
				smsReturnMsgDto.setReturnStatus(resultMsg);//returnStatus
				
				resultList.add(smsReturnMsgDto);
			}
		}catch(Exception e){
			logger.error("Exception happened in SMSServiceImpl.parseSendReturnXml(), the xmlMsg: "+ xmlMsg +"; the error msg is " + e.getMessage());
			throw e;
		}
		
		return resultList;
	}

猜你喜欢

转载自blog.csdn.net/coolcoffee168/article/details/48803149