使用到的工具和软件有:IntelliJ IDEA 各种版本, dom4j-1.6.1, 一个xml文件;
1.查看xml文件的格式,便于后面的模拟输出
]>
测试1
作者1
25.0
测试2
作者2
50
测试3
作者3
2.5
2.导入dom4j框架包
3.新建Test测试类
4.导入各种包,idea中可在使用时快捷加载 ,所有异常只做抛出不做处理
1 import org.dom4j.Attribute;
2 import org.dom4j.Document;
3 import org.dom4j.DocumentException;
4 import org.dom4j.Element;
5 import org.dom4j.io.SAXReader;
6 import java.io.File;
7 import java.lang.reflect.InvocationTargetException;
8 import java.util.Iterator;
5.创建StringBuilder对象,用于模拟输出,实例化SAXReader类
//不做异常处理 只抛出
public static void main(String[] args) throws ClassNotFoundException, NoSuchMethodException, IllegalAccessException, InvocationTargetException, InstantiationException, DocumentException {
//创建StringBuilder对象,收集数据信息
StringBuilder sb = new StringBuilder();
//加载SAXReader类
Class> cf = Class.forName("org.dom4j.io.SAXReader");
//实例化SAXReader类
SAXReader sr = (SAXReader)cf.getDeclaredConstructor().newInstance();
6.读取books.xml节点信息
//SAXReader的read() 读取 books.xml
Document bdoc = sr.read(new File("src/com/test/dom/domain/books.xml"));
//getRootElement() 拿到根节点信息
Element rootElement = bdoc.getRootElement();
//elementIterator 拿到根节点的子节点信息
Iterator biter = rootElement.elementIterator();
7.拼接数据信息 模拟输出文档原本信息
//hasNext判断是否存在下一个元素
while (biter.hasNext())
{
//next()指针下移,返回该指针所指向的元素
Element next = biter.next();
Attribute id = next.attribute("id");
//拼接
sb.append("
//拿到book
sb.append(next.getName());
sb.append(" ");
//拿到key值 'id'
sb.append(id.getName());
sb.append("=");
//拿到value值 '1'
sb.append(id.getValue());
sb.append(">");
//拿到book下的子节点信息
Iterator iter = next.elementIterator();
sb.append("\n");
while(iter.hasNext())
{
//拼接
//
//
//
Element next1 = iter.next();
sb.append("\t");
sb.append("
sb.append(next1.getName());
sb.append(">");
sb.append(next1.getStringValue());
sb.append("
sb.append("/");
sb.append(next1.getName());
sb.append(">");
sb.append("\n");
}
//拼接
sb.append("
sb.append("/");
sb.append(next.getName());
sb.append(">");
sb.append("\n");
}
8. 输出StringBuilder信息
//输出信息
System.out.println(sb);
线程安全:StringBuffer线程安全,StringBuilder线程不安全。缓冲区:StringBuffer直接使用toStringCache构造字符串。StringBuilder复制字符数组再构造。性能:StringBuilder的性能要远大于StringBuffer。