dom4j 实现对xml文件的解析和修改
对xml文件的读取和解析,本文以对系统pom.xml文件的读取和解析为例。
private static Map<String,String> getAllProperties() throws DocumentException { String filePath = "D:\\work_intel\\new_common\\basic-pom\\pom.xml"; SAXReader reader = new SAXReader(); Document document = reader.read(new File(filePath)); //获取文档根节点 Element root = document.getRootElement(); //输出根标签的名字 System.out.println(root.getName()); //获取某个节点 Element propertiesElement = root.element("properties"); //获取该节点下所有的元素 List<Element> els = propertiesElement.elements(); Map<String,String> proMap = new HashMap<String, String>(); for(Element e : els){ String name = e.getName(); String value = e.getStringValue(); // System.out.println(name+":::"+value); proMap.put(name,value); } return proMap; }
上文实现了,把pom文件里的properties读取到map的功能。
下面看一个对于修改xml的代码:
private static void getPom(String file) throws DocumentException { Map<String,String> proMap = getAllProperties(); SAXReader reader = new SAXReader(); Document document = reader.read(new File(file)); /** * 节点对象的操作方法 */ //获取文档根节点 Element root = document.getRootElement(); //输出根标签的名字 System.out.println(root.getName()); //查询properties节点,如果没有就add一个 Element propertiesElement = root.element("properties"); if(propertiesElement == null){ propertiesElement = root.addElement("properties"); } Element contactElem = root.element("dependencies"); //获得指定节点下面的子节点 List<Element> contactList = contactElem.elements("dependency"); for (Element e:contactList){ String version = e.element("version").getStringValue().toString(); if(version.contains("$")){ continue; } String artifactId = e.element("artifactId").getStringValue(); String groupId = e.element("groupId").getStringValue(); String newPropertyName = artifactId+".version"; String hasVersion = proMap.get(newPropertyName); if(hasVersion == null){ newPropertyName = propertyName(artifactId,groupId); hasVersion = proMap.get(newPropertyName); } if(hasVersion != null){ if(!hasVersion.equals(version)){ System.out.println(String.format("冲突:%s , 已有版本:%s , 现有版本:%s",newPropertyName,hasVersion,version)); } }else{ String ss = String.format("<%s>%s</%s>\n",newPropertyName,version,newPropertyName); System.out.println(ss); Element e1 = propertiesElement.addElement(newPropertyName); e1.setText(version); } Element versionEle = e.element("version"); versionEle.setText(String.format("${%s}",newPropertyName)); } try { /** 将document中的内容写入文件中 */ XMLWriter writer = new XMLWriter(new FileWriter(new File(file))); writer.write(document); writer.close(); } catch (Exception ex) { ex.printStackTrace(); } }
这段代码是吧当前pom里依赖的jar版本号,改为basic.pom里已经定义的jar的版本号,如果basic.pom里没有,就在当前pom文件里新建一个property.
转载请注明:刘召考的博客 » dom4j 实现对xml文件的解析和修改
文章来源:
Author:goomoon
link:http://www.liuzk.com/310.html
上一篇:Maven依赖的scope定义