美文网首页
dom4j 添加父节点的问题

dom4j 添加父节点的问题

作者: NullPointerE | 来源:发表于2017-03-21 19:26 被阅读0次

    原XML格式如下:

    dom4j 添加父节点的问题

    要将它转换为如下的格式:

    dom4j 添加父节点的问题

    百度了好久,网上都没有XML添加父节点的例子,最初想用最笨的方法一个Element一个Element的添加,那个实在太笨了。看着节点名字差不多就想有没有类似模糊查询的方法,然后考虑xpath,正则表达式来获取又对这俩不熟,最后想了好久,想到是根据名字来获取的,就是字符串啊,然后就用的String.contains()来匹配的。下面上代码。
    import java.io.File;
    import java.io.FileWriter;
    import java.util.List;

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.dom.DOMDocumentFactory;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;

    /**

    • @author 陈文五

    /
    public class XmlTest {
    /
    *

    • @param InPath 要转换的XML文件路径

    • @param eleName1 父节点名(子节点名的一部分)

    • @param eleName2 父节点名(子节点名的一部分)

    • @param OutPath 转换后的XML输出路径
      */
      public static void changeXML(String InPath,String eleName1,String eleName2,String OutPath) {
      Document doc = DOMDocumentFactory.getInstance().createDocument();
      SAXReader reader = new SAXReader();
      File file = new File(InPath);
      Document document;
      try {
      document = reader.read(file);
      Element root = document.getRootElement();
      Element r = DocumentHelper.createElement(root.getName());
      doc.add(r);
      Element e = DocumentHelper.createElement(eleName1);

           Element ele = DocumentHelper.createElement(eleName2);
           
           List eleList = root.elements();
           for(Element element:eleList){
               if(element.getName().contains(eleName1)){
                   e.add((Element)(element.clone()));
               }else if(element.getName().contains(eleName2)){
                   ele.add((Element)(element.clone()));
               }else{
                   r.add((Element)(element.clone()));
               }
           }
           r.add(e);
           r.add(ele);
           OutputFormat format = OutputFormat.createPrettyPrint();
           format.setEncoding("gb2312");
           XMLWriter writer = new XMLWriter(
           new FileWriter(new File(OutPath)), format);
           writer.write(doc);
           writer.close();
       } catch (DocumentException e) {
           e.printStackTrace();
       }catch (Exception e){
           e.printStackTrace();
       }
      

      }
      }

    以上就是最终的代码,中间卡在了添加节点在同一层父节点下,卡了我快一个小时。那么给出之前的代码,聪明如你,看一看体会一下问题是出在哪里,怎么解决的。

    import java.io.File;
    import java.io.FileWriter;
    import java.io.IOException;
    import java.util.List;

    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.DocumentHelper;
    import org.dom4j.Element;
    import org.dom4j.Node;
    import org.dom4j.dom.DOMDocumentFactory;
    import org.dom4j.dom.DOMElement;
    import org.dom4j.io.OutputFormat;
    import org.dom4j.io.SAXReader;
    import org.dom4j.io.XMLWriter;

    public class XmlTest {

    public static void changeXML(String inPath,String eleName1,String eleName2,String outPath) {
        Document doc = DOMDocumentFactory.getInstance().createDocument();
        SAXReader reader = new SAXReader();
        File file = new File(inPath);
        Document document;
        try {
            document = reader.read(file);
            Element root = document.getRootElement();
            DOMElement r = (DOMElement) doc.addElement(root.getName());
            List eleList = root.elements();
            for(Element element:eleList){
                if(element.getName().contains(eleName1)){
                    int index = 0;
                    Element e = null;
                    if(e==null){
                        e = r.addElement(eleName1); 
                    }e.add((Element)(element.clone()));
                }else if(element.getName().contains(eleName2)){
                    Element ele = null;
                    if(ele==null){
                    ele = r.addElement(eleName2);
                    }
                    ele.add((Element)(element.clone()));
                }else{
                    r.add((Element)(element.clone()));
                }
            }
            OutputFormat format = OutputFormat.createPrettyPrint();
            format.setEncoding("gb2312");
            XMLWriter writer = new XMLWriter(
            new FileWriter(new File("E://new.xml")), format);
            writer.write(doc);
            writer.close();} catch (DocumentException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }catch (Exception e){
            e.printStackTrace();
        }
    }  
    

    }

    这是帮一同进公司的妹子做的题,由于公司项目大量使用XML,帮忙做的同时自己也巩固一下dom4j。写这篇文章也是给广大受xml折磨的同志一个例子,毕竟在自己做这道题的时候网上都没有找到给xml添加父节点的例子,也害得我花了两个多小时才解决。有什么问题疑问也欢迎留言。以上。

    相关文章

      网友评论

          本文标题:dom4j 添加父节点的问题

          本文链接:https://www.haomeiwen.com/subject/mzggnttx.html