天天看點

傳智播客教育訓練2.21 XML程式設計

先看一個book.xml檔案:

<?xml version="1.0" encoding="utf-8"?>

<書架> 

  <書> 

    <書名 id="a1">javaweb開發</書名>  

    <作者 name="zxx">張孝祥</作者>  

    <售價>69.0元</售價> 

  </書>  

    <書名 id="a2">java開發</書名>  

    <作者 name="老張">張孝祥</作者>  

  </書> 

</書架>

下面是對這個xml檔案的一些常見操作:

package cn.itcast.dom4j;

import java.io.fileoutputstream;

import java.io.outputstreamwriter;

import java.io.writer;

import java.util.list;

import org.dom4j.document;

import org.dom4j.documentexception;

import org.dom4j.documenthelper;

import org.dom4j.element;

import org.dom4j.io.outputformat;

import org.dom4j.io.saxreader;

import org.dom4j.io.xmlwriter;

import org.junit.test;

// dom4j 增删改查

public class dom4jdemo {

// 查找第一本書的名字

@test

public void find() throws exception {

// 1.建立解析器對象

saxreader reader = new saxreader();

// 2.解析一個xml

document document = reader.read("src/book.xml");

// 3.獲得根元素

element rootelement = document.getrootelement();

// 4.獲得書節點

element bookelement = rootelement.element("書"); // 獲得第一個指定名稱的子節點

// 5.獲得書名節點

element booknameelement = bookelement.element("書名");

// 6.輸出元素的内容

string text = booknameelement.gettext();

system.out.println(text);

}

// 查找第二本書作者節點的name屬性

public void findattribute() throws exception {

// 獲得document

document document = dom4jutils.getdocument();

// 獲得第二本書的作者節點

// 根元素

// 獲得第二本書

list<element> elements = rootelement.elements("書");

element bookelement = elements.get(1);

// 獲得作者

element authorelement = bookelement.element("作者");

string value = authorelement.attributevalue("name");

system.out.println(value);

// 增加一個節點, 第二本書增加一個售價

public void add() throws exception {

// 獲得根元素

element bookelement = (element) rootelement.elements("書").get(1);

/* 傳統方式

// 建立一個售價節點

element priceelement = documenthelper.createelement("售價");

// 添加内容

priceelement.settext("108元");

// 加到書節點下面

bookelement.add(priceelement);*/

// addelement方法建立了新元素,添加到目前元素下面,傳回了新建立的元素

bookelement.addelement("售價").settext("108元");

// 寫入xml

dom4jutils.write2xml(document);

//增加一個屬性

public void addattribute() throws exception {

// 獲得第一個作者

element author = rootelement.element("書").element("作者");

// 增加一個屬性

author.addattribute("name", "zxx");

// 寫入檔案

//删除一個節點

public void remove() throws exception {

// 獲得第二本書的第二個售價節點

element priceelement = (element) ((element) rootelement.elements("書").get(1)).elements("售價").get(1);

// 獲得它的父節點删除自身

priceelement.getparent().remove(priceelement);

dom4jutils.java檔案:

import java.io.filenotfoundexception;

import java.io.unsupportedencodingexception;

public class dom4jutils {

// 獲得document對象

public static document getdocument() throws documentexception {

return reader.read("src/book.xml");

public static void write2xml(document document) throws exception {

// filewriter流預設是用gb2312編碼

//filewriter out = new filewriter("src/book.xml");

/* 快捷的輸出方式

writer out = new outputstreamwriter(new fileoutputstream("src/book.xml"), "utf-8");

document.write(out);

out.close();*/

// 帶格式化的輸出方式

outputformat format = outputformat.createprettyprint();

format.setencoding("utf-8");

/*writer out = new outputstreamwriter(new fileoutputstream("src/book.xml"), "utf-8");

xmlwriter writer = new xmlwriter(out, format);*/

xmlwriter writer = new xmlwriter(new fileoutputstream("src/book.xml"), format);

writer.write(document);

writer.close();