dom4j解析xml文件 或者xml格式字符串

来源:互联网 发布:顶级域名表示政府部门 编辑:程序博客网 时间:2024/06/14 04:29

  主要记录的是项目中遇到的解析xml报文 获取指定数据的方法,怕以后会忘,记录一下

  导包:dom4j(版本根据需要,不会造成兼容错误就可以)

 主要思路:利用递归的形式,解析xml文件,首先附录递归的方法,因为要求是需要把抓取到的数据放到指定文件,并且现在只是一个demo形式,所以用了FileWriter的相关方法,还不尽完善,有需要改善的地方希望大家留言...

 

/** * 解析任意xml节点的方法 */public static void resolveNode (Element node,FileWriter writer) throws IOException {//如果是thedata标签 ,抓取属性value值if ("TheData".equalsIgnoreCase(node.getName())) {//输出当前节点名writer.write("\r\n");writer.write("------------------\r\n");writer.write("当前节点:" + node.getName() + "\r\n");//遍历当前节点所有的属性值,抓取value属性的值List<Attribute> attributes = node.attributes();for (Attribute a : attributes) {if ("value".equalsIgnoreCase(a.getName())) {writer.write("属性:" + a.getName() + ",值:"+ a.getValue() + "\r\n");}}}//获取所有的子节点,并递归此方法Iterator<Element> iterator = node.elementIterator();while (iterator.hasNext()) {Element e = iterator.next();resolveNode(e,writer);}}

创建file文件的方法:

public static String createFile (String fileName) {//获取FileWriter,写入文件String result = "";File directory = new File(".");String path = null;try {path = directory.getCanonicalPath();} catch (IOException e) {e.printStackTrace();throw new RuntimeException("获取当前路径时出错");}path += "\\" + fileName;logger.info("path = " + path);File file = new File (path);if(file.exists()) {            logger.info("创建单个文件" + path + "失败,目标文件早已存在!");            return path;        }        if (path.endsWith(File.separator)) {        logger.error("创建单个文件" + path + "失败,目标文件不能为目录!");            return result;        }        //判断目标文件所在的目录是否存在        if(!file.getParentFile().exists()) {            //如果目标文件所在的目录不存在,则创建父目录            System.out.println("目标文件所在目录不存在,准备创建它!");            if(!file.getParentFile().mkdirs()) {            logger.error("创建目标文件所在目录失败!");                return result;            }        }        //创建目标文件        try {            if (file.createNewFile()) {            logger.info("创建单个文件" + path + "成功!");                return path;            } else {            logger.error("创建单个文件" + path + "失败!");                return result;            }        } catch (IOException e) {            e.printStackTrace();            logger.error("创建单个文件" + path + "失败!" + e.getMessage());            return result;        }}

主方法:

@RequestMapping("/resolveXML.do")@ResponseBodypublic ControllerResult ResolveXmlMethod (@RequestBody String xmlStr) {/*//读取xml文件的方法SAXReader reader = new SAXReader();                    Document   document = reader.read(new File("文件路径"));*/ControllerResult result = new ControllerResult();logger.info("xmlStr=" + xmlStr);//解析xml字符串Document doc = null;try {doc = DocumentHelper.parseText(xmlStr);} catch (DocumentException e) {e.printStackTrace();result.setIsSuccess(false);result.setMsg("字符串转换xml格式出错");return result;}//获取根节点Element root = doc.getRootElement();//创建输出目录String filePath = createFile("log.txt");if (filePath == null || "".equals(filePath.trim())) {result.setIsSuccess(false);result.setMsg("创建输出目标文件失败");return result;}FileWriter writer = null;try {                 writer = new FileWriter(filePath, true);             writer.write("\r\n");            writer.write("\r\n");            writer.write("\r\n");            writer.write("#################\r\n");            //遍历指定节点和她下面所有的子节点,并写入指定文件    resolveNode(root,writer);        } catch (IOException e) {                 e.printStackTrace();            result.setIsSuccess(false);result.setMsg("创建写文件器失败");return result;        } finally {                 try {                     if(writer != null){                      writer.close();                     }              } catch (IOException e) {                     e.printStackTrace();                 }             } result.setIsSuccess(true);return result;}

-------------------------------------------------------------------------------------END---------------------------------------------------------------------------------------

 

原创粉丝点击