解析格式为纯字符串的MAP封装起来的XML:(1)

<map>
  <entry>
    <string>TASKTRANSACTOR</string>
    <string>lg629 627294</string>
  </entry>
  <map>
	 <entry>
	   <string>draftFile</string>
	 </entry>
	 <entry>
	   <string>TASKID</string>
	   <string>N0000000000101341854</string>
	 </entry>
	 <entry>
	   <string>ISNEWFLOW</string>
	   <string>1</string>
	 </entry>
  </map>
  <entry>
    <string>SYSID</string>
    <string>1411037022335</string>
  </entry>
</map>

用MAP封装起来的XML,格式如下,比如我要取TASKID对应的值,怎么取?而且这个MAP又是字符串的形式传来的:

--------解析格式为纯字符串的MAP封装起来的XML:
package com.paic.incentive.core.common.eoa.biz.service.impl;

import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.HashMap;
import java.util.Map;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.DOMException;
import org.w3c.dom.Document;
import org.w3c.dom.Element;
import org.w3c.dom.Node;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;
import com.paic.incentive.core.common.eoa.biz.service.IEoaService;
import com.paic.incentive.core.reward.award.personnel.integration.dao.SpecialGrantDAO;
import com.paic.incentive.core.util.SpringUtil;


/**
 * @author EX-YEZHIQIANG001
 * xifre方式调用 实现类(解析格式为纯字符串的MAP封装起来的XML)
 */


public class EoaServiceImpl implements IEoaService {


private SpecialGrantDAO specialGrantDAO;

@SuppressWarnings("unchecked")
@Override
public void recevieEoaMsg(String taskInfo) {
try {
byte[] b = taskInfo.getBytes("UTF-8");
ByteArrayInputStream is = new ByteArrayInputStream(b);

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();
Document doc = db.parse(is);
String taskId = "";
String taskstatus = "";
Element e = doc.getDocumentElement();

//解析XML
NodeList nodeList = e.getElementsByTagName("entry");
Element element = null;
for(int i=0;i<nodeList.getLength();i++){
element = (Element) nodeList.item(i); 
Node node = (Node) element.getElementsByTagName("string").item(0);
if(node.getTextContent().equals("TASKID")){
taskId = element.getElementsByTagName("string").item(1).getTextContent();
}else if(node.getTextContent().equals("TASKSTATUS")){
taskstatus = element.getElementsByTagName("string").item(1).getTextContent();
}
}
/*
文件的状态(TASKSTATUS):
COMPLIED:文件归档(数据库状态保存为2,下面3种状态表示失败为3);
REJECTED:文件终止(不同意且终止);
ABANDONED:文件作废;
DRAFTDELETE:草稿箱签报作废。
*/
if("COMPLIED".equals(taskstatus)){
taskstatus = "2";
}else if(null == taskstatus || "null".equals(taskstatus) || "".equals(taskstatus)){
taskstatus = null;
}else{
taskstatus = "3";
}
int status = Integer.parseInt(taskstatus); 
Map map = new HashMap();
map.put("p_taskId", taskId);
map.put("p_status", status);

specialGrantDAO = (SpecialGrantDAO) SpringUtil.getBean("specialGrantDAO");  

boolean flag = specialGrantDAO.saveSGApproval(map);

} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (DOMException e) {
e.printStackTrace();
} catch (ParserConfigurationException e) {
e.printStackTrace();
} catch (SAXException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用dom4j封装的工具类来实现Java解析XML字符串Map的功能。具体步骤如下: 1.引入dom4j和jaxen的依赖包。 2.编写XmlUtils工具类,实现xmlParser方法,该方法接收两个参数,一个是xml字符串,一个是根节点名称,返回一个Map类型的结果。 ```java import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.Element; import org.dom4j.io.SAXReader; public class XmlUtils { public static Map<String, Object> xmlParser(String xml, String rootName) throws DocumentException { Map<String, Object> map = new HashMap<String, Object>(); SAXReader reader = new SAXReader(); Document document = reader.read(new ByteArrayInputStream(xml.getBytes())); Element root = document.getRootElement(); if (root.getName().equals(rootName)) { map.put(root.getName(), parseElement(root)); } return map; } private static Map<String, Object> parseElement(Element element) { Map<String, Object> map = new HashMap<String, Object>(); List<Attribute> attributes = element.attributes(); for (Attribute attribute : attributes) { map.put("->" + element.getName() + "=>" + attribute.getName(), attribute.getValue()); } List<Element> elements = element.elements(); if (elements.size() == 0) { map.put("->" + element.getName(), element.getTextTrim()); } else { for (Element ele : elements) { if (ele.elements().size() == 0) { map.put("->" + element.getName() + "->" + ele.getName(), ele.getTextTrim()); } else { map.put("->" + element.getName() + "->" + ele.getName(), parseElement(ele)); } } } return map; } } ``` 3.在需要解析XML字符串的地方,调用xmlParser方法即可。 ```java String xml = "<root><name>张三</name><age>18</age><address><province>广东</province><city>深圳</city></address></root>"; Map<String, Object> map = XmlUtils.xmlParser(xml, "root"); System.out.println(map); ``` 输出结果为: ```java {root={->name=张三, ->age=18, ->address={->province=广东, ->city=深圳}}} ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值