首先我們給出一段示例程序:
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的對(duì)象
????????????SAXReader?reader?
=
?
new
?SAXReader();
????????????OutputFormat?format?
=
?OutputFormat.createPrettyPrint();
????????????format.setEncoding(
"
GBK
"
);
//
?設(shè)置XML文件的編碼格式
????????????String?filePath?
=
?
"
d:\\student.xml
"
;
????????????File?file?
=
?
new
?File(filePath);
????????????
if
?(file.exists())?
{
????????????????Document?document?
=
?reader.read(file);
//
?讀取XML文件
????????????????Element?root?
=
?document.getRootElement();
//
?得到根節(jié)點(diǎn)
????????????????
boolean
?bl?
=
?
false
;
????????????????
for
?(Iterator?i?
=
?root.elementIterator(
"
學(xué)生
"
);?i.hasNext();)?
{
????????????????????Element?student?
=
?(Element)?i.next();
????????????????????
if
?(student.attributeValue(
"
sid
"
).equals(
"
001
"
))?
{
????????????????????????
//
?修改學(xué)生sid=001的學(xué)生信息
????????????????????????student.selectSingleNode(
"
姓名
"
).setText(
"
王五
"
);
????????????????????????student.selectSingleNode(
"
年齡
"
).setText(
"
25
"
);
????????????????????????writer?
=
?
new
?XMLWriter(
new
?FileWriter(filePath),?format);
????????????????????????writer.write(document);
????????????????????????writer.close();
????????????????????????bl?
=
?
true
;
????????????????????????
break
;
????????????????????}
????????????????}
????????????????
if
?(bl)?
{
????????????????????
//
?添加一個(gè)學(xué)生信息
????????????????????Element?student?
=
?root.addElement(
"
學(xué)生
"
);
????????????????????student.addAttribute(
"
sid
"
,?
"
100
"
);
????????????????????Element?sid?
=
?student.addElement(
"
編號(hào)
"
);
????????????????????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文件并新增內(nèi)容
????????????????Document?_document?
=
?DocumentHelper.createDocument();
????????????????Element?_root?
=
?_document.addElement(
"
學(xué)生信息
"
);
????????????????Element?_student?
=
?_root.addElement(
"
學(xué)生
"
);
????????????????_student.addAttribute(
"
sid
"
,?
"
001
"
);
????????????????Element?_id?
=
?_student.addElement(
"
編號(hào)
"
);
????????????????_id.setText(
"
001
"
);
????????????????Element?_name?
=
?_student.addElement(
"
姓名
"
);
????????????????_name.setText(
"
灰機(jī)
"
);
????????????????Element?_age?
=
?_student.addElement(
"
年齡
"
);
????????????????_age.setText(
"
18
"
);
????????????????writer?
=
?
new
?XMLWriter(
new
?FileWriter(file),?format);
????????????????writer.write(_document);
????????????????writer.close();
????????????}
????????????System.out.println(
"
操作結(jié)束!?
"
);
????????}
?
catch
?(Exception?e)?
{
????????????e.printStackTrace();
????????}
????}
}
執(zhí)行結(jié)果應(yīng)該是這樣:
循環(huán)解析節(jié)點(diǎn):
???????? 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對(duì)象相關(guān)
1.讀取XML文件,獲得document對(duì)象.
??????Document???document? = ?reader.read( new ?File( " input.xml " ));
2.解析XML形式的文本,得到document對(duì)象.
??????Document?document? = ?DocumentHelper.parseText(text);
3.主動(dòng)創(chuàng)建document對(duì)象.
??????Element?root? = ?document.addElement( " members " ); // ?創(chuàng)建根節(jié)點(diǎn)
二.節(jié)點(diǎn)相關(guān)
1.獲取文檔的根節(jié)點(diǎn).
2.取得某節(jié)點(diǎn)的單個(gè)子節(jié)點(diǎn).
3.取得節(jié)點(diǎn)的文字

也可以用:

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

7.設(shè)置節(jié)點(diǎn)文字.

8.刪除某節(jié)點(diǎn).

9.添加一個(gè)CDATA節(jié)點(diǎn).


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


2.取得屬性的文字

也可以用:

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

5.設(shè)置屬性的文字


6.刪除某屬性


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



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






五.字符串與XML的轉(zhuǎn)換
1.將字符串轉(zhuǎn)化為XML


2.將文檔或節(jié)點(diǎn)的XML轉(zhuǎn)化為字符串.







更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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