dom4j向xml中插入新的元素

package com.huawei.test;


import java.io.File;
import java.io.FileOutputStream;
import java.util.List;


import org.dom4j.Document;
import org.dom4j.DocumentHelper;
import org.dom4j.Element;
import org.dom4j.io.OutputFormat;
import org.dom4j.io.SAXReader;


public class InsertElement {


/**
* @param args
* @throws Exception 
*/
public static void main(String[] args) throws Exception {
try {  
OutputFormat format = OutputFormat.createPrettyPrint();  
format.setEncoding("utf-8");  
            SAXReader reader = new SAXReader();  
            Document document = reader.read("C:\\Users\\Administrator\\Desktop\\strings.xml");  
            Element root = document.getRootElement();  
            List<Element> elements = root.elements();  
            int index = 0;  
            for(Element element:elements){  
                index++;  
                if("app_name".equals(element.attributeValue("name"))){  
                    Element elem = DocumentHelper.createElement("string");
                    elem.addAttribute("name", "bbb");  
                    elem.setText("ppppppp");
//                    elem.addAttribute("name", "ccc");  
                    elements.add(index,elem);  
                    break;  
                }  
            }  
            
            OutputFormat format1 = OutputFormat.createPrettyPrint();//缩减型格式
          //OutputFormat format = OutputFormat.createCompactFormat();//紧凑型格式
          format1.setEncoding("utf-8");//设置编码
//          //format.setTrimText(false);//设置text中是否要删除其中多余的空格
            org.dom4j.io.XMLWriter xmlWriter = new org.dom4j.io.XMLWriter( 
                    new FileOutputStream( new File("C:\\Users\\Administrator\\Desktop\\strings.xml")),format1); 
//            XMLWriter writer = new XMLWriter(new FileWriter("C:\\Users\\Administrator\\Desktop\\strings.xml"),format);  
            xmlWriter.write(document);  
            xmlWriter.close();  
        } catch (Exception e) {  
            // TODO Auto-generated catch block  
            e.printStackTrace();  
        }  
//---------------------------------------------------------
// Document document = DOMDocumentFactory.getInstance().createDocument();  
//  
//  DOMElement root = (DOMElement) document.addElement("Resource");  
//  Element message = addElement(root, "string");  
//  message.setText("001");  
//  
//  message = addElement(root, "string");  
//  message.setText("002");  
//  
//  message = addElement(root, "string");  
//  message.setText("003");  
//  
//  OutputFormat format = OutputFormat.createPrettyPrint();//缩减型格式
//          //OutputFormat format = OutputFormat.createCompactFormat();//紧凑型格式
//          format.setEncoding("utf-8");//设置编码
//          //format.setTrimText(false);//设置text中是否要删除其中多余的空格
//  XMLWriter writer = new XMLWriter(System.out, format);  
//  writer.write(document);  
//  writer.close();  
// }  
//  
// public static Element addElement(DOMElement parent, String childName) {  
//  DOMElement message = new DOMElement(childName);  
//  if (parent.hasChildNodes()) {  
//    org.w3c.dom.Node firstNode = parent.getFirstChild();  
//    parent.insertBefore(message, firstNode);  
//  } else {  
//    parent.add(message);  
//  }  
//  return message;  
// }  
}


}

===========================================================

.Tip:Dom4j在指定位置插入节点

1.得到插入位置的节点列表

(list)

2.调用list.add(index,elemnent),由index决定element的插入位置。

Element元素可以通过DocumentHelper对象得到。示例代码:

Element aaa = DocumentHelper.createElement_x_x("aaa");

aaa.setText("aaa");

List list = root.element("书").elements();

list.add(1, aaa);

//更新document

七.Tip:字符串与XML的转换

1.将字符串转化为XML

String text = " sitinspring";

Document document = DocumentHelper.parseText(text);

2.将文档或节点的XML转化为字符串.

SAXReader reader = new SAXReader();

Documentdocument = reader.read(new File("input.xml"));Element root=document.getRootElement();

String docXmlText=document.asXML();

String rootXmlText=root.asXML(); Element memberElm=root.element("member"); String memberXmlText=memberElm.asXML(); 八.实例Dom4j的操作

//dom4j的CRUD

package cn.itcast.dom4j;

import java.io.File;

import java.io.FileNotFoundException;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.junit.Test;

public class Demo1 {

//遍历xml文档

@Test

public void test1() throws DocumentException{

//创建一个SAX阅读器

SAXReader reader = new SAXReader();

//读取xml文档,获得该文档

Document document =reader.read(new File("src/book.xml"));

//调用遍历方法,传入要遍历的文档中的跟节点

list(document.getRootElement());

}

//创建遍历跟节点的方法

private void list(Element rootElement) {

//先获得根节点名

System.out.println(rootElement.getName());

//获得根节点的所有子节点,装入一个集合

List list =rootElement.elements();

//遍历集合,判断是否有节点,如果是节点再调用遍历方法

for(Node node : list){

if(node instanceof Element){

list((Element)node);

}

}

}

//读取售价的值

@Test

public void read() throws Exception{

//1.获得读取器和文档

SAXReader reader = new SAXReader();

Document document = reader.read(new File("src/book.xml"));

//2.获得根节点

Element root =document.getRootElement();

//3.获得想要得到的值

String author = root.element("书").element("作者").getText();

System.out.println(author);

}

//向xml文档中添加一个:39元

@Test

public void write() throws DocumentException, IOException{

//创建读取器

SAXReader reader = new SAXReader();

//读取文档

Document document =reader.read(new File("src/book.xml"));

//创建要添加的节点,利用dom4j的帮助类

Element price = DocumentHelper.createElement_x_x("售价");

price.setText("100元");

//获得根节点

Element root = document.getRootElement();

//找到要插入的节点的父类调用插入方法

root.element("书").add(price);

//创建一个写入编译器

OutputFormat format = OutputFormat.createPrettyPrint();

//设置编译码表

format.setEncoding("UTF-8");

//创建一个XML写入器

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);

//写入节点

writer.write(document);

writer.close();

}

//向指定位置插入:39元

@Test

public void write2() throws DocumentException, IOException{

//获得读取器和文档

SAXReader reader = new SAXReader();

Document document = reader.read(new File("src/book.xml"));

//创建节点和属性

Element price =DocumentHelper.createElement_x_x("售价");

price.setText("39元");

//获得根节点再获得到要插入的父节点

Element book = document.getRootElement().element("书");

//获得对象的所有节点集合

List books = book.elements();

//插入到指定的集合中的位置

books.add(3, price);

//将内存中的写入到xml

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("UTF-8");

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);

writer.write(document);

writer.close();

}

//删除售价节点:

@Test

public void delete() throws DocumentException, IOException{

SAXReader reader = new SAXReader();

Document document = reader.read(new File("src/book.xml"));

//获得要删除的节点

Element price = document.getRootElement().element("书").element("售价");

//获取该节点的父节点删除该节点

price.getParent().remove(price);

OutputFormat format = OutputFormat.createPrettyPrint();

format.setEncoding("UTF-8");

XMLWriter writer = new XMLWriter(new FileOutputStream("src/book.xml"),format);

writer.write(document);

writer.close();

}

}

阅读更多
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭