java XML 读写
/**
* 解析微信发来的请求 XML
* 使用stax解析xml,经测试,dom4j快8倍
*/
public Map<String,String> pareXml(HttpServletRequest request) throws Exception {
log.debug("start analysis weiChart request log message ");
//将解析的结果存储在HashMap中
Map<String,String> reqMap = new HashMap<String, String>();
//从request中取得输入流
InputStream inputStream = request.getInputStream();
XMLInputFactory factory = XMLInputFactory.newFactory();// 使用其默认构造器
XMLEventReader streamReader = factory.createXMLEventReader(inputStream, "UTF-8");// 获取xml读取流
try {
String nextNode=null;
String value=null;
while (streamReader.hasNext()) {// 读取下一个指针
XMLEvent event = streamReader.nextEvent();//获取事件节点
if (XMLStreamConstants.START_ELEMENT == event.getEventType()) {//开始节点
StartElement start = event.asStartElement();
nextNode=start.getName().getLocalPart();
}
//当出现CDATA和文本是标注为文本节点,获取其中的内容
if (XMLStreamConstants.CDATA == event.getEventType()||XMLStreamConstants.CHARACTERS == event.getEventType()) {
Characters charData = (Characters) event;
value=charData.getData();
if(StringUtils.isNotBlank(value)) {
reqMap.put(nextNode, value);
}
}
}
}catch (XMLStreamException e) {
log.error(e.getMessage());
}finally {
streamReader.close();
inputStream = null;
}
log.info("get weiChart request message :{}",reqMap.toString());
return reqMap;
}
public void messageJumpCustomerService(Map<String,String> appenedMap,Map<String,String> map,OutputStream output) throws IOException{
Document document=DocumentHelper.createDocument();
Element root=DocumentHelper.createElement("xml");
Element element;
for(Entry<String, String> entry:appenedMap.entrySet()){
element=DocumentHelper.createElement(entry.getKey());
element.addText("<![CDATA["+entry.getValue()+"]]>");
root.add(element);
}
for(Entry<String, String> entry:map.entrySet()) {
element=DocumentHelper.createElement(entry.getKey());
element.addText(entry.getValue());
root.add(element);
}
document.add(root);
OutputFormat outputFormat=OutputFormat.createPrettyPrint();
outputFormat.setEncoding("UTF-8");
outputFormat.setIndentSize(2);
outputFormat.setNewlines(true);
outputFormat.setTrimText(false);
outputFormat.setPadText(true);
XMLWriter xmlwrite=new XMLWriter(output,outputFormat);
xmlwrite.setEscapeText(false);
xmlwrite.write(document);
xmlwrite.close();
output.close();
}