Posted on 2009-07-03 17:28
胡娟 閱讀(383)
評論(0) 編輯 收藏 所屬分類:
JAVA
所需要jiar包
所要解析和創建的xml文件樣式
<?xml version="1.0" encoding="gb2312"?>
<students>
<student id="1">
<name>hujuan</name>
<age>24</age>
</student>
<student id="2">
<name>fankai</name>
<age>24</age>
</student>
</students>
解析xml過程
package com.hujuan.xml;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
public class ReadXML {
public void readXml(String fileName){
//創建builder實例,這里的false表示使用默認的解析器
SAXBuilder builder = new SAXBuilder(false);
try {
//加載xml
Document document = builder.build(fileName);
//獲得根元素
Element studentsElement = document.getRootElement();
//獲得student元素下面的所有元素的子元素
List studentList = studentsElement.getChildren("student");
//循環list集合
for(Iterator it = studentList.iterator();it.hasNext();){
Element student = (Element)it.next();
//獲得得元素的屬性
String id = student.getAttributeValue("id");
System.out.println(id);
//獲得子元素的屬性
String name = student.getChildTextTrim("name");
System.out.println(name);
String age = student.getChild("age").getText();
System.out.println(age);
}
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
創建xml的過程
package com.hujuan.xml;
import java.io.FileWriter;
import java.io.IOException;
import org.jdom.Attribute;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;
public class CreateXml {
public void createXml(){
//創建一個Document,因為xml文檔必須一直有一個唯一的根元素,所以Document將Element放在它的構造器中
Element studentsElement = new Element("students");
Document document = new Document(studentsElement);
//添加一個子元素,student節點
Element student = new Element("student");
//給student節點添加id屬性,值為1
student.setAttribute(new Attribute("id","1"));
Element name = new Element("name");
name.addContent("hujuan");
student.addContent(name);
student.addContent(new Element("age").addContent("24"));
studentsElement.addContent(student);
Element student2 = new Element("student").setAttribute("id","2");
//添加子元素并設置元素內容
student2.addContent(new Element("name").setText("fankai"));
student2.addContent(new Element("age").setText("24"));
studentsElement.addContent(student2);
try {
//將xml輸出到屏幕上
XMLOutputter outputter = new XMLOutputter(Format.getPrettyFormat());
outputter.output(document, System.out);
//將xml輸出到文件中
FileWriter writer = new FileWriter("src/aa.xml");
outputter.output(document, writer);
writer.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
測試用例
package junit.test;
import org.junit.Test;
import com.hujuan.xml.CreateXml;
import com.hujuan.xml.ReadXML;
public class XmlTest {
private String fileName = "src/student.xml";
@Test
public void readXmlTest(){
ReadXML readXml = new ReadXML();
readXml.readXml(fileName);
}
@Test
public void creatXmlTest(){
CreateXml createXml = new CreateXml();
createXml.createXml();
}
}
調用readXmlTest()方法輸出結果
1
hujuan
24
2
fankai
24
調用creatXmlTest()方法的輸出結果
<?xml version="1.0" encoding="UTF-8"?>
<students>
<student id="1">
<name>hujuan</name>
<age>24</age>
</student>
<student id="2">
<name>fankai</name>
<age>24</age>
</student>
</students>
修改元素節點的值
student.getChild("age").setText("22");
刪除節點
student.removeChild("name")
Format 控制輸出文檔的格式
Format.getCompactFormat() 表示采用緊湊的格式
Format.getRawFormat() 表示采用原始格式
Format.getPrettyFormat() 表示采用美化格式,即以兩個空格作為縮進來輸出文檔