1) Xml中元素与dom4j中类和属性的对应关系
Document : 对应整个xml文件
Element : xml中的一对尖括号
attribute: 一个尖括号中的键值对
text:一对尖括号之间的内容
2) 生成一个xml文件
//创建一个xml文件对应的document对象
Document document = DocumentHelper.createDocument();
Element root = DocumentHelper.createElement("dota");
//将root设置为根节点
document.setRootElement(root);
//为root添加子节点“天灾”
root.addElement("天灾");
//为root添加子节点“近卫”
Element jinwei = root.addElement("近卫");
jinwei.addAttribute("direction", "south-east");
jinwei.addAttribute("member", "allmost animal");
jinwei.addAttribute("typical", "df");
jinwei.setText("for my father the king!");
//为jinwei添加子节点“智力型”
Element intelligence = jinwei.addElement("智力型");
intelligence.addAttribute("智力", "大于100");
//为intelligence添加子节点“qop”
Element qop = intelligence.addElement("qop");
qop.addAttribute("blink", "distance 500");
//设置xml文件的输出格式
OutputFormat format = new OutputFormat();
format.setEncoding("UTF-8");//设置xml为utf-8编码
format.setNewlines(true);//设置xml换行
format.setIndent(true);//设置缩进
XMLWriter xmlWriter = null;
try {
xmlWriter = new XMLWriter(new FileOutputStream(new File("first.xml")), format);
xmlWriter.write(document);
}
catch (UnsupportedEncodingException e)
{
e.printStackTrace();
} catch (FileNotFoundException e)
{
e.printStackTrace();
} catch (IOException e)
{
e.printStackTrace();
}
finally
{
try
{
xmlWriter.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
3)递归解析xml
@Test
public void readXml()
{
SAXReader reader = new SAXReader();
Document document = null;
try
{
document = reader.read(new File("first.xml"));
//获取根节点
Element root = document.getRootElement();
analysisXml(root);
} catch (DocumentException e)
{
e.printStackTrace();
}
}
private void analysisXml(Element e)
{
for(Iterator<Element> it=e.elementIterator(); it.hasNext();)
{
Element child = it.next();
log.log(Level.INFO, child.getName());
Iterator<Element> i = child.elementIterator();
//如果hasNext为true,则说明有子节点
if(i.hasNext())
analysisXml(child);
}
}