Dom4j总结
Dom4j的简单介绍1、 Dom4j是一个简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM开发的。与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。2、 Dom4j是一个非常优秀的Java XML API,具有性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如Hi
·
Dom4j的简单介绍
1、 Dom4j是一个
简单、灵活的开放源代码的库。Dom4j是由早期开发JDOM开发的。与JDOM不同的是,dom4j使用接口和抽象的人分离出来而后独立基类,虽然Dom4j的API相对要复杂一些,但它提供了比JDOM更好的灵活性。
2、 Dom4j是一个非常优秀的Java XML API,具有
性能优异、功能强大和极易使用的特点。现在很多软件采用的Dom4j,例如
Hibernate,包括sun公司自己的JAXM也用了Dom4j。
3、 使用Dom4j开发,需下载dom4j相应的
jar
文件。
DOM4j中,获得Document对象的方式有
三种:
1.
读取
XML
文件
,
获得
document
对象
SAXReader reader = new SAXReader();
Document document = reader.read(new File("input.xml"));
Document document = reader.read(new File("input.xml"));
2.
解析
XML
形式的文本
,
得到
document
对象
.
String text = "<members></members>";
Document document = DocumentHelper.parseText(text);
Document document = DocumentHelper.parseText(text);
3.
主动创建
document
对象
.
Document document = DocumentHelper.createDocument();
//创建根节点
//创建根节点
Element root = document.addElement("members");
节点对象:
1、
获取文档的根节点
.
Element root = document.getRootElement();
2、
取得某个节点的子节点.
Element element=node.element(“书名");
3、
取得节点的文字
String text=node.getText();
4、
取得某节点下所有名为
“member”
的子节点,并进行遍历
.
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}
List nodes = rootElm.elements("member");
for (Iterator it = nodes.iterator(); it.hasNext();) {
Element elm = (Element) it.next();
// do something
}
5、
对某节点下的所有子节点进行遍历
.
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
// do something
}
for(Iterator it=root.elementIterator();it.hasNext();){
Element element = (Element) it.next();
// do something
}
6、
在某节点下添加子节点
.
Element ageElm = newMemberElm.addElement("age");
Element ageElm = newMemberElm.addElement("age");
7、
设置节点文字
.
element.setText("29");
element.setText("29");
8、
删除某节点
.
//childElm是待删除的节点,parentElm是其父节点
//childElm是待删除的节点,parentElm是其父节点
parentElm.remove(childElm);
9、
添加一个
CDATA
节点
.
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
Element contentElm = infoElm.addElement("content");
contentElm.addCDATA(diary.getContent());
事例:
public
class
GoodWell03 {
public
static
void
main(String[] args)
throws
Exception {
SAXReader sreader =
new
SAXReader();
Document doc = sreader.read(
new
File(
"src//Book.xml"
));
Element root = doc.getRootElement();
System.
out
.println(root.getName());
perse(root);
}
private
static
void
perse(Element root) {
atter(root);
for
(Iterator<Element> it=root.elementIterator();it.hasNext();){
Element entity=it.next();
if
(entity.isTextOnly()){
atter(entity);
System.
out
.println(entity.getText());//
遍历所有
}
else
{
perse(entity);
}
}
}
private
static
void
atter(Element root) {
//
TODO
Auto-generated method stub
for
(Iterator<Attribute> it=root.attributeIterator();it.hasNext();){
Attribute entity=it.next();
System.
out
.println(entity.getName()+
" "
+entity.getValue());
}
}
}
节点对象属性:
1、
取得某节点下的某属性
Element root=document.getRootElement();
//属性名name
Element root=document.getRootElement();
//属性名name
Attribute attribute=root.attribute("size");
2、
取得属性的文字
String text=attribute.getText();
String text=attribute.getText();
3、
删除某属性
Attribute attribute=root.attribute("size");
root.remove(attribute);
Attribute attribute=root.attribute("size");
root.remove(attribute);
.
遍历某节点的所有属性
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
Element root=document.getRootElement();
for(Iterator it=root.attributeIterator();it.hasNext();){
Attribute attribute = (Attribute) it.next();
String text=attribute.getText();
System.out.println(text);
}
4、
设置某节点的属性和文字.
newMemberElm.addAttribute("name", "sitinspring");
newMemberElm.addAttribute("name", "sitinspring");
5、
设置属性的文字
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
Attribute attribute=root.attribute("name");
attribute.setText("sitinspring");
将文档写入xml文件
1、文档中全为英文,不设置编码,直接写入的形式.
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
XMLWriter writer = new XMLWriter(new FileWriter("output.xml"));
writer.write(document);
writer.close();
2、文档中含有中文,设置编码格式写入的形式.
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定XML编码
OutputFormat format = OutputFormat.createPrettyPrint();
// 指定XML编码
format.setEncoding("GBK");
XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();
XMLWriter writer = new XMLWriter(newFileWriter("output.xml"),format);
writer.write(document);
writer.close();
事例:
Document doc=DocumentHelper.createDocument();
Element root=doc.addElement(
"books"
);
Element book=root.addElement(
"book"
);
book.addAttribute(
"isbn"
,
"112"
);
Element name=book.addElement(
"name"
);
name.setText(
"java"
);
Element author=book.addElement(
"author"
);
author.setText(
"goodwell"
);
Element price=book.addElement(
"price"
);
price.setText(
"112"
);
OutputFormat format=
new
OutputFormat(
" "
,
true
,
"UTF-8"
);
XMLWriter xw=
new
XMLWriter(
new
FileWriter(
"src//bk.xml"
),format);
xw.write(doc);
xw.close();
dom4j在指定位置插入节点:
1.得到插入位置的节点列表(list)
2.调用list.add(index,elemnent),由index决定element的插入位置。
Element元素可以通过DocumentHelper对象得到。示例代码:
Element aaa = DocumentHelper.
createElement("aaa");
aaa.setText("aaa");
List list = root.element("书").elements();
list.add(1, aaa);
//更新document
SAXReader reader=
new
SAXReader();
Document doc=reader.read(
new
File(
"src//bk.xml"
));
Element root=doc.getRootElement();
Element address=DocumentHelper.createElement(
"address"
);
address.setText(
"
保定
"
);
Element el= (Element) root.elements(
"book"
).get(1);
List list1=el.elements();
list1.add(2, address);
//
删除第二个
book
中的地址
Element element=(Element) root.elements("book").get(1);
Element el=element.element("address");
element.remove(el);
OutputFormat format=
new
OutputFormat(
" "
,
true
,
"UTF-8"
);
XMLWriter xw=
new
XMLWriter(
new
FileWriter(
"src//bk.xml"
),format);
xw.write(doc);
xw.close();
更多推荐
已为社区贡献2条内容
所有评论(0)