代码示例如下:
// book.xml文件
<?xml version="1.0" encoding="UTF-8" standalone="no"?><书架>
<书>
<书名>Java就业培训教程</书名>
<作者>张孝祥</作者>
<售价>39.00元</售价>
</书>
<书>
<书名>葵花宝典</书名>
<作者>陈浩</作者>
<售价>2.00元</售价>
</书>
</书架>
public class dom4j_exercise {
// DOM4J的使用
public static void main(String[] args) throws Exception {
// 得到解析器
SAXReader reader = new SAXReader();
// 得到Document,
Document document = reader.read( "src/book.xml" );
// test1(document);
// test2(document.getRootElement());
test7 (document);
}
// 1、得到某个具体的节点内容:第2本书的作者
private static void test1(Document document) throws Exception {
// 1.得到根元素
Element root = document.getRootElement();
// 2.得到根元素书里面所有(书)元素的集合(只得到儿子,不得到孙子),注意不是get方法,是element.
List<Element> books = root.elements( "书" ) ;
// 3.得到第二本书
Element secondBook = books.get(1);
// 4.得到书中的(作者)元素
Element author = secondBook.element( "作者" );
System. out .println(author.getTextTrim());
}
// 2、遍历所有元素节点:只打印元素的名称
private static void test2(Element element) throws Exception {
System. out .println(element.getName());
// 一下代码copyDOM4J文档说明Fast Looping
for ( int i = 0, size = element.nodeCount(); i < size; i++) {
Node node = element.node(i);
if (node instanceof Element) {
test2 ((Element) node);
} else {
// do something....
}
}
}
// 3、修改某个元素节点的主体内容
// 第二本书售价由2.00元变为1.00元
private static void test3(Document document) throws Exception {
// 1.得到根元素
Element root = document.getRootElement();
// 2.得到根元素书里面所有(书)元素的集合(只得到儿子,不得到孙子)注意不是get方法,是element.
List<Element> books = root.elements( "书" ) ;
// 3.得到第二本书
Element secondBook = books.get(1);
// 4.得到书中的(售价)元素,修改
Element price = secondBook.element( "售价" );
price.setText( "1.00元" );
// 5.写入到文件.复制DOM4J文档说明Writing a document to a file
// OutputFormat format = OutputFormat.createPrettyPrint();//好看的,默认的输出格式.
OutputFormat format = OutputFormat. createCompactFormat (); // 不好看的,机器看的
format.setEncoding( "UTF-8" ); // 设置编码
XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ),
format);
// XMLWriter writer = new XMLWriter(new
// FileOutputStream(" src /book.xml"));
writer.write(document);
writer.close();
}
// 4、向指定元素节点中增加子元素节点 :在第一本书增加内部价节点,48.00元
private static void test4(Document document) throws Exception {
// 1.创建元素DocumentHelper,这个类可以创建好多东西;
Element e = DocumentHelper. createElement ( "内部价" ).addText( "48.00元" );
// 2.添加元素到文档中,有父亲才可以添加.
document.getRootElement().element( "书" ).add(e);
// 3.写入元素
XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ));
writer.write(document);
writer.close();
}
// 5、向指定元素节点上增加同级元素节点,在售价上增加批发价58.00元.
private static void test5(Document document) throws Exception {
// 1.创建元素DocumentHelper,这个类可以创建好多东西;
Element e = DocumentHelper. createElement ( "批发价" ).addText( "58.00元" );
// 2.添加元素到文档中,得到第一本书的孩子们,他们在一个集合中,操作这个集合即可.
Element book = document.getRootElement().element( "书" );
List<Element> list = book.elements() ;
// 3.批发价是插入到第三个元素,index为2
list.add(2, e);
// 4.写入元素
XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ));
writer.write(document);
writer.close();
}
// 6、删除指定元素节点:删除第一本书的批发价
private static void test6(Document document) throws Exception {
// 1.删除元素,得到第一本书的孩子们,他们在一个集合中,操作这个集合即可.
Element book = document.getRootElement().element( "书" );
List<Element> list = book.elements() ;
// 2.批发价是插入到第三个元素,index为2
list.remove(2);
// 3.写入元素
XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ));
writer.write(document);
writer.close();
}
// 7、操作XML文件属性:第二本书添加出版社="传智"
private static void test7(Document document) throws Exception {
// 1.得到根元素
Element root = document.getRootElement();
// 2.找到第二本书,增加属性,因为是第二本,不是第一本,所以要从集合里区.第一本直接取
Element book2 = (Element)root.elements( "书" ).get(1);
book2.addAttribute( "出版社" , "传智" );
// 3.写入元素
XMLWriter writer = new XMLWriter( new FileOutputStream( "src/book.xml" ));
writer.write(document);
writer.close();
} }