今天写了一个接口,获取XML解析数据,根据生成新的XML并响应回去。完成后试了一下,确实可以用,所以为大家分享一下。本文是针对我需要的XML格式而写的,有很多解析XML的操作都没用到。如果大家有什么问题可以随时留言讨论。
//XML文档的解析和生成操作
@RequestMapping(value = "/getIndicators", method = RequestMethod.POST)
public void getIndicators(HttpServletRequest request, HttpServletResponse response){
ArrayList<String> list = new ArrayList<String>();
try {
//获取HTTP请求的输入流,以HTTP请求输入流建立一个BufferedReader输入流对象
BufferedReader br = new BufferedReader(new InputStreamReader(request.getInputStream(), "UTF-8"));
String buffer = null;
// 创建字符串对象拼接存放请求到的文档流内容
StringBuffer xml = new StringBuffer();
while ((buffer = br.readLine()) != null) {
// 拼接读取到的请求参数
xml.append(buffer);
}
//创建文档对象和各种需要的流对象
Document document = null;
//创建SAXReader解析器对象,用于解析XML输入流对象
SAXReader reader = new SAXReader();
//创建字节流对象,并读取字节
ByteArrayInputStream inputStream = new ByteArrayInputStream(xml.toString().getBytes());
InputStreamReader ir = new InputStreamReader(inputStream);
//获取到xml文件,并为文档对象赋值
document = reader.read(ir);
//获取到XML文档后,根据项目需求,解析XML文件(也就是document对象)
//首先获取根节点
Element rootElement = document.getRootElement();
Iterator iterator = rootElement.elementIterator();
//遍历根节点,获取里面的子节点(解析XML文档设计方法很多,这里就不详细讲解了,此处写了操作子节点的方法,
Element stu = (Element) iterator.next();
//获取到根节点的一级子节点
List<Attribute> attributes = stu.attributes();
//遍历根节点中的一级子节点,并输出打印一级子节点的属性值
for (Attribute attribute : attributes) {
System.out.println(attribute.getValue());
}
//根据一级子节点获取二级子节点,并遍历
Iterator iterator1 = stu.elementIterator();
while (iterator1.hasNext()){
Element stuChild = (Element) iterator1.next();
//输出二级子节点的节点名
System.out.println("二级子节点名:" + stuChild.getName());
//输出二级子节点的节点值
System.out.println("二级子节点值:"+stuChild.getStringValue());
}
}
} catch (Exception ex) {
ex.printStackTrace();
} finally {
//生成XML文档并响应
// 1、创建document对象
Document document = DocumentHelper.createDocument();
// 2、创建根节点ret
Element ret = document.addElement("return");
// 3、向ret节点添加version属性
ret.addAttribute("version", "2.0");
// 4、生成子节点及子节点内容(生成一个status 子节点,并为子节点设置节点值)
Element status = ret.addElement("status");
status.setText("success");
// 5、生成其他的子节点(生成api一级子节点,然后通过api一级子节点生成value二级子节点并设置节点值)
Element api = ret.addElement("api");
Element value = api.addElement("value");
//为api一级子节点设置name属性并赋值
api.addAttribute("name", "张三");
//为value二级子节点设置节点值
value.setText("26岁");
// 6、设置生成xml的格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 设置编码格式
format.setEncoding("UTF-8");
XMLWriter writer;
try {
// 为输出流赋值
writer = new XMLWriter(response.getOutputStream(), format);
//document为通过http返回的xml文件
writer.write(document);
writer.flush();
if (null != writer) {
//关闭输出流
writer.close();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}