首先我們給出一段示例程序:
import
?java.io.File;
import
?java.io.FileWriter;
import
?java.util.Iterator;
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;
public
?
class
?DOM4JTest?
{
/**
?
*/
/**
?
*/
/**
?
*/
/**
?????*?DOM4J讀寫XML示例
?????*?
?????*?
@param
?args
?????*?
@throws
?Exception
?????
*/
????
public
?
static
?
void
?main(String[]?args)?
{
????????
try
?
{
????????????XMLWriter?writer?
=
?
null
;
//
?聲明寫XML的對象
????????????SAXReader?reader?
=
?
new
?SAXReader();
????????????OutputFormat?format?
=
?OutputFormat.createPrettyPrint();
????????????format.setEncoding(
"
GBK
"
);
//
?設置XML文件的編碼格式
????????????String?filePath?
=
?
"
d:\\student.xml
"
;
????????????File?file?
=
?
new
?File(filePath);
????????????
if
?(file.exists())?
{
????????????????Document?document?
=
?reader.read(file);
//
?讀取XML文件
????????????????Element?root?
=
?document.getRootElement();
//
?得到根節點
????????????????
boolean
?bl?
=
?
false
;
????????????????
for
?(Iterator?i?
=
?root.elementIterator(
"
學生
"
);?i.hasNext();)?
{
????????????????????Element?student?
=
?(Element)?i.next();
????????????????????
if
?(student.attributeValue(
"
sid
"
).equals(
"
001
"
))?
{
????????????????????????
//
?修改學生sid=001的學生信息
????????????????????????student.selectSingleNode(
"
姓名
"
).setText(
"
王五
"
);
????????????????????????student.selectSingleNode(
"
年齡
"
).setText(
"
25
"
);
????????????????????????writer?
=
?
new
?XMLWriter(
new
?FileWriter(filePath),?format);
????????????????????????writer.write(document);
????????????????????????writer.close();
????????????????????????bl?
=
?
true
;
????????????????????????
break
;
????????????????????}
????????????????}
????????????????
if
?(bl)?
{
????????????????????
//
?添加一個學生信息
????????????????????Element?student?
=
?root.addElement(
"
學生
"
);
????????????????????student.addAttribute(
"
sid
"
,?
"
100
"
);
????????????????????Element?sid?
=
?student.addElement(
"
編號
"
);
????????????????????sid.setText(
"
100
"
);
????????????????????Element?name?
=
?student.addElement(
"
姓名
"
);
????????????????????name.setText(
"
嘎嘎
"
);
????????????????????Element?sex?
=
?student.addElement(
"
性別
"
);
????????????????????sex.setText(
"
男
"
);
????????????????????Element?age?
=
?student.addElement(
"
年齡
"
);
????????????????????age.setText(
"
21
"
);
????????????????????writer?
=
?
new
?XMLWriter(
new
?FileWriter(filePath),?format);
????????????????????writer.write(document);
????????????????????writer.close();
????????????????}
????????????}
?
else
?
{
????????????????
//
?新建student.xml文件并新增內容
????????????????Document?_document?
=
?DocumentHelper.createDocument();
????????????????Element?_root?
=
?_document.addElement(
"
學生信息
"
);
????????????????Element?_student?
=
?_root.addElement(
"
學生
"
);
????????????????_student.addAttribute(
"
sid
"
,?
"
001
"
);
????????????????Element?_id?
=
?_student.addElement(
"
編號
"
);
????????????????_id.setText(
"
001
"
);
????????????????Element?_name?
=
?_student.addElement(
"
姓名
"
);
????????????????_name.setText(
"
灰機
"
);
????????????????Element?_age?
=
?_student.addElement(
"
年齡
"
);
????????????????_age.setText(
"
18
"
);
????????????????writer?
=
?
new
?XMLWriter(
new
?FileWriter(file),?format);
????????????????writer.write(_document);
????????????????writer.close();
????????????}
????????????System.out.println(
"
操作結束!?
"
);
????????}
?
catch
?(Exception?e)?
{
????????????e.printStackTrace();
????????}
????}
}
???????? try ? {
????????????Document?authtmp? = ?DocumentHelper.parseText(xml);
????????????List < Element > ?list? = ?authtmp.selectNodes( " //sms/node " );
???????????? for ?( int ?j? = ? 0 ;?j? < ?list.size();?j ++ )? {
????????????????Element?node? = ?(Element)?list.get(j);
????????????????nodeByNodes(node);
????????????}
????????} ? catch ?(Exception?e)? {
????????????e.printStackTrace();
????????}
????}
???? private ? void ?nodeByNodes(Element?node)? {
???????? if ?(node.element( " node " )? != ? null )? {
????????????String?id? = ?node.attributeValue( " id " );
????????????String?name? = ?node.attributeValue( " name " );
????????????System.out.print(id? + ? " ------- " );
????????????System.out.println(name);
???????????? for ?(Iterator?i? = ?node.elementIterator( " node " );?i.hasNext();)? {
????????????????Element?newNode? = ?(Element)?i.next();
????????????????nodeByNodes(newNode);
????????????}
????????} ? else ? {
????????????String?id? = ?node.attributeValue( " id " );
????????????String?name? = ?node.attributeValue( " name " );
????????????System.out.print(id? + ? " ------- " );
????????????System.out.println(name);
????????}
????}
其次DOM4J的解釋
一.Document對象相關
1.讀取XML文件,獲得document對象.
??????Document???document? = ?reader.read( new ?File( " input.xml " ));
2.解析XML形式的文本,得到document對象.
??????Document?document? = ?DocumentHelper.parseText(text);
3.主動創建document對象.
??????Element?root? = ?document.addElement( " members " ); // ?創建根節點
二.節點相關
1.獲取文檔的根節點.
2.取得某節點的單個子節點.
3.取得節點的文字

也可以用:

這個是取得根節點下的name字節點的文字.
4.取得某節點下名為"member"的所有字節點并進行遍歷.
for ?(Iterator?it? = ?nodes.iterator();?it.hasNext();)? {
????Element?elm? =?(Element)?it.next();
??? // ?do?something
}
5.對某節點下的所有子節點進行遍歷.
?????????????????Element?element? = ?(Element)?it.next();
???????????????? // ?do?something
?????????????}
6.在某節點下添加子節點.

7.設置節點文字.

8.刪除某節點.

9.添加一個CDATA節點.


????????????contentElm.getText(); // 特別說明:獲取節點的CDATA值與獲取節點的值是一個方法
????????????contentElm.clearContent(); //清除節點中的內容,CDATA亦可
三.屬性相關.
1.取得某節點下的某屬性


2.取得屬性的文字

也可以用:

這個是取得根節點下name字節點的屬性firstname的值.
3.遍歷某節點的所有屬性
???????????? for (Iterator?it = root.attributeIterator();it.hasNext();) {
?????????????????Attribute?attribute? = ?(Attribute)?it.next();
?????????????????String?text = attribute.getText();
?????????????????System.out.println(text);
?????????????}
4.設置某節點的屬性和文字.

5.設置屬性的文字


6.刪除某屬性


四.將文檔寫入XML文件.
1.文檔中全為英文,不設置編碼,直接寫入的形式.



2.文檔中含有中文,設置編碼格式寫入的形式.






五.字符串與XML的轉換
1.將字符串轉化為XML


2.將文檔或節點的XML轉化為字符串.







更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
