java DOM4J 读取XML

时间:2023-10-04 12:52:31

最近学习Java,在处理XML文档的时候,查阅相关资料,发现了DOM4J这个jre库,相对C#的XML处理来说,功能还算是跟得上

下面展示一篇我自己写的一个XML读取测试

import java.util.Iterator;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.MalformedURLException;
import org.dom4j.*;
import org.dom4j.io.SAXReader; public class XmlRead { static StringBuilder sBuilder = new StringBuilder(); public static void main(String[] args) throws IOException { BufferedReader bReader = new BufferedReader(new InputStreamReader(
System.in));
String path = null;
System.out.println("请输入XML文件的绝对路径以及文件名:\n");
path = bReader.readLine(); sBuilder.append("开始输出XML文件内容\n"); Document document = null;
try {
document = read(path);
sBuilder.append(path + "\n");
} catch (MalformedURLException e) {
e.printStackTrace();
} catch (DocumentException e) {
e.printStackTrace();
} Element root = getRootElement(document);
if (root == null) {
System.out.print("没有获取到root节点");
return;
}
// 获取XML文档的编码格式
String encString = document.getXMLEncoding();
sBuilder.append("<?xml version=\"1.0\" encoding=\"" + encString
+ "\">\n");
sBuilder.append(elementText(root, attText(root), 0)); System.out.println(getIterator(root, 0) + "</" + root.getName() + ">"); } /**
* 递归节点
*
* @description
* @param element
* @param lvl
* 层级
* @return
*/
private static String getIterator(Element element, int lvl) { lvl += 1; for (Iterator i = element.elementIterator(); i.hasNext();) {
Element e = (Element) i.next();
sBuilder.append(elementText(e, attText(e), lvl));
getIterator(e, lvl); int count = e.nodeCount(); if (count > 0) {
for (int j = 0; j < lvl; j++) {
sBuilder.append(" ");
}
}
sBuilder.append("</" + e.getName() + ">\n");
} return sBuilder.toString();
} /**
* 获取当前节点的属性的值的字符串
*
* @description
* @param element
* 当前节点
* @return
*/
private static String attText(Element element) { String str = " ";
for (int i = 0; i < element.attributeCount(); i++) {
Attribute attribute = element.attribute(i); str += attribute.getName() + "=\"" + attribute.getValue() + "\" ";
}
return str;
} /**
* 获取当前Element的文本值
*
* @description
* @param element
* 当前Element节点
* @param text
* 属性值
* @param lvl
* 层级
* @return
*/
private static String elementText(Element element, String text, int lvl) {
String str = "";
for (int i = 0; i < lvl; i++) {
str += " ";
}
str += "<" + element.getName();
if (text != null && text != "") {
str += text;
}
     //由于dom4j里面没有 hasChild这个属性或者方法,所以要用nodeCount()这个方法来判断时候还有子节点
int count = element.nodeCount();
if (count == 0) {
return str += ">";
}
return str += ">\n";
} /**
*
* @description 读取XML文件
* @param file
* XML文件路径,包含文件名
* @return Document 文档
* @throws MalformedURLException
* @throws DocumentException
*/
public static Document read(String file) throws MalformedURLException,
DocumentException { SAXReader reader = new SAXReader();
Document document = reader.read(new File(file));
return document;
} /**
* 获取Document文档的root节点
*
* @param document
* @return
*/
public static Element getRootElement(Document document) {
return document.getRootElement();
} }