1、POST请求——读取xml文件
(1)根据请求参数,调用HttpServletRequest的getAttribute(String attri)方法读取xml的内容
String xmlContent = request.getAttribute(Constants.REQUEST_CONTENT);
定义StringReader
StringReader sr = new StringReader(xmlContent);
定义SAXReader
SAXReader saxReader = new SAXReader();
通过SAXReader将xml的所有内容以Document的形式读出
Document document = saxReader.read(sr);
查找根节点Element root
查找根节点对应的不同子节点,如recentElement(其名为CompatibleConstants.RECENT_TYPE)
Element recentElement = root.element(CompatibleConstants.RECENT_TYPE);
找到recentElement下面的指定格式的Element,如modifyElement(其名为CompatibleConstants.MODIFY_XML)
Element modifyElement = typeElement.element(CompatibleConstants.MODIFY_XML);
查找modifyElement下的所有Element
List<Element> items = modifyElement.elements();
针对不同的Element,获取其List<Attribute>
if(null != items && !items.isEmpty()){
for (Element item : items) { //遍历每个Item
List<Attribute> ltAttr = item.attributes();
if(null == ltAttr || ltAttr.isEmpty()){
continue;
}
}
Attribute中对应的是一个Map.Entry<K, V>,分别调用Attribute的getName()和getValue()方法获取其key and value
Map<String, String> mapAttr = new HashMap<String, String>(ltAttr.size());
for (Attribute attr : ltAttr) {
String attrName = attr.getName();
String attrValue = attr.getValue();
if(!HistoryConstants.EPG_FILTER.contains(attrName)){//过滤epg信息
mapAttr.put(attrName, attrValue);
}
2、写xm文件
写xml的文件头"
<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n
<root ret=\"1\" msg=\"\" etag=\"" + md5 + "\">\r\n"
+ xml + "\r\n
</root>"
其中md5代表了etag的值,xml是实际需要填入的各Element值
向xml中写入不同Element
定义Document
Document document = DocumentHelper.createDocument();
向document中添加根节点(其下有很多子Element)
Element element = document.addElement(type);
循环向element下 添加子element
for (Map<String, String> recent : ltMapHistory) {
Element item = element.addElement("Item");
为每一个element设置Attribute
for (Entry<String, String> entry : recent.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
item.addAttribute(key, value);
}
}
}
以xml格式返回document
return document.getRootElement().asXML();
3、将xml作为response返回
public static void sendXMLResponse(HttpServletResponse response, int status, String xml){
response.setContentType("text/xml; charset=UTF-8");
response.setHeader("Cache-Control","no-cache");
response.setStatus(status);
PrintWriter out;
try {
out = response.getWriter();
out.println(xml);
out.flush();
} catch (IOException e) {
e.printStackTrace();
}
}