您的位置:首页 > 编程语言 > Java开发

java 以dom方式解析xml

2015-09-29 10:01 190 查看
【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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: