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