今天写了一个接口,获取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();
                    
                 }
         }
     }