dom4j 解析xml

package common.utils;


import java.io.File;
import java.io.FileOutputStream;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


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


/**
 * xml 解析工具類 返回list集合
 * 使用jar包爲 dom4j-2.1.0.jar
 * @author Administrator
 *
 */
public class AnalysisXmlUtil {

private List<Object> xmllist = new ArrayList<>();

public static void main(String[] args) {

try {
AnalysisXmlUtil a = new AnalysisXmlUtil();
a.ReadXml("D:\\LocList.xml");
List<Object> l = a.xmllist;
System.out.println(l.get(1));
System.out.println(l.size());
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 讀取xml文件
* @param filepath 文件路徑
* @throws Exception
*/
public void ReadXml(String filepath) throws Exception {


// 創建saxreader對象
SAXReader reader = new SAXReader();
// 讀取一個文件,把這個文件轉換成Document對象
Document document = reader.read(new File(filepath));
// 獲取根元素
Element root = document.getRootElement();
listNodes(root);
// 把文檔轉換字符串
/*
* String docXmlText = document.asXML(); System.out.println(docXmlText);
* System.out.println("---------------------------"); // csdn元素標籤根轉換的內容
* String rootXmlText = root.asXML(); System.out.println(rootXmlText);
* System.out.println("---------------------------");
*/
// 獲取java元素標籤 內的內容
/*
* Element e = root.element("CountryRegion");
* System.out.println(e.asXML());
*/


}


/**
* 創建一個document對象 往document對象中添加節點元素 轉存爲xml文件

* @throws Exception
*/
public void WriteXml() throws Exception {


Document document = DocumentHelper.createDocument();// 創建根節點
Element root = document.addElement("csdn");
Element java = root.addElement("java");
java.setText("java");
Element ios = root.addElement("ios");
ios.setText("ios");


writerNewFile(document);
}


/**
* 把一個文本字符串轉換Document對象

* @throws Exception
*/
public void StringToDocument() throws Exception {
String text = "<csdn><java>Java</java><net>Net</net></csdn>";
Document document = DocumentHelper.parseText(text);
Element e = document.getRootElement();
System.out.println(e.getName());
writerNewFile(document);
}


/**
* 把document對象寫入新的文件

* @param document
* @throws Exception
*/
public void writerNewFile(Document document) throws Exception {
// 緊湊的格式
// OutputFormat format = OutputFormat.createCompactFormat();
// 排版縮進的格式
OutputFormat format = OutputFormat.createPrettyPrint();
// 設置編碼
format.setEncoding("UTF-8");
// 創建XMLWriter對象,指定了寫出文件及編碼格式
// XMLWriter writer = new XMLWriter(new FileWriter(new
// File("src//a.xml")),format);
XMLWriter writer = new XMLWriter(new OutputStreamWriter(new FileOutputStream(new File("src//c.xml")), "UTF-8"),
format);
// 寫入
writer.write(document);
// 立即寫入
writer.flush();
// 關閉操作
writer.close();
}

/**
* 遍歷所有xml節點
* @param node
*/
public void listNodes(Element node) {
String s = node.getName();
// System.out.println("當前節點的名稱:" +s);
// 首先獲取當前節點的所有屬性節點
s = "nodeName=" + s;
List<Attribute> list = node.attributes();
// 遍歷屬性節點
String t = "";
for (Attribute attribute : list) {
// System.out.println("屬性" + attribute.getName() + ":" +
// attribute.getValue());
t += "," + attribute.getName() + "=" + attribute.getValue();
}
// 如果當前節點內容不爲空,則輸出
if (!(node.getTextTrim().equals(""))) {
System.out.println(node.getName() + ":" + node.getText());
t = ",value=" + node.getText();
}
// xmllist.add(s);
xmllist.add(s + t);
// 同時迭代當前節點下面的所有子節點
// 使用遞歸
Iterator<Element> iterator = node.elementIterator();
while (iterator.hasNext()) {
Element e = iterator.next();
listNodes(e);
}
}
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章