1.入门实例一:xml文件的读取与修改
xml文件:library.xml
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book email="abc@163.com">
<name>jdom</name>
<price>60.0</price>
</book>
</books>
代码实例:JDomParse.java
package edu.sjtu.erplab.jdom;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Iterator;
import java.util.List;
//下面是引用到JDOM中的类
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
public class JDomParse {
public JDomParse() {
//定义xml文件路径
String xmlpath = "D:\\Documents\\workspace\\JAVAStudy\\src\\edu\\sjtu\\erplab\\jdom\\library.xml";
SAXBuilder builder = new SAXBuilder(false);
try {
Document doc = builder.build(xmlpath);
// 得到根元素
Element books = doc.getRootElement();
// 得到“books”元素的所在名称为“book”的元素,并把这些元素都放到一个List集合中
List booklist = books.getChildren("book");
/**
* 轮循List集合,方法1:
*/
for (Iterator iter = booklist.iterator(); iter.hasNext();) {
Element book = (Element) iter.next();
String email = book.getAttributeValue("email");// 获取email元素的值
System.out.println(email);
String name = book.getChildTextTrim("name");
System.out.println(name);
// 修改name元素的值,注意的是,必须确定book元素的名为“name”的子元素只有一个。
book.getChild("name").setText("edit-jdom");
}
/**
* 轮循List集合,方法2:
*/
// for (int i = 0; i < booklist.size(); i++) {
// Element book = (Element) booklist.get(i);
// String email = book.getAttributeValue("email");// 获取email元素的值
// System.out.println(email);
// String name = book.getChildTextTrim("name");
// System.out.println(name);
//// 修改name元素的值,注意的是,必须确定book元素的名为“name”的子元素只有一个。
// book.getChild("name").setText("edit-jdom");
// }
// 使用XMLOutputter类,把已经修改了的Document保存进XML文档中。
XMLOutputter outputter = new XMLOutputter();
outputter.output(doc, new FileOutputStream(xmlpath));
} catch (JDOMException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
new JDomParse();
}
}
输出结果:
abc@163.com
jdom
这个时候在去查看library.xml会发现它已经变为:
<?xml version="1.0" encoding="UTF-8"?>
<books>
<book email="abc@163.com">
<name>edit-jdom</name>
<price>60.0</price>
</book>
</books>
2.入门实例二:XML文件的创建与读取
代码实例:JdomRWXML.java
package edu.sjtu.erplab.jdom;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;
import org.jdom.Document;
import org.jdom.Element;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.XMLOutputter;
public class JdomRWXML {
/**
* 创建xml文档
* @throws IOException
* @throws JDOMException
*/
public void BuildXMLDoc() throws IOException, JDOMException {
// 创建根节点 list;
Element root = new Element("list");
// 将根节点添加到文档中;
Document Doc = new Document(root);
// 此处 for 循环可替换成 遍历 数据库表的结果集操作;
for (int i = 0; i < 5; i++) {
// 创建新节点 company;
Element elements = new Element("company");
// 给 company 节点添加属性 id;
elements.setAttribute("id", "" + i);
// 给 company 节点添加子节点并赋值
elements.addContent(new Element("company_name").setText("name" + i));
elements.addContent(new Element("company_email").setText("name" + i + "@163.com"));
// 给父节点list添加company子节点;
root.addContent(elements);
}
XMLOutputter XMLOut = new XMLOutputter();
// 输出company_list.xml文件;
XMLOut.output(Doc, new FileOutputStream("company_list.xml"));
}
/**
* 读取xml文档
* @throws IOException
* @throws JDOMException
*/
public void ReadXMLDoc() throws IOException, JDOMException {
SAXBuilder sb = new SAXBuilder();// 建立构造器
Document doc = sb.build(new FileInputStream("company_list.xml"));// 读入指定文件
Element root = doc.getRootElement();// 获得根节点
List<?> list = root.getChildren();// 将根节点下的所有子节点放入List中
for (int i = 0; i < list.size(); i++) {
System.out.println("---------------------------");
Element item = (Element) list.get(i);// 取得节点实例
String id = item.getAttribute("id").getValue();// 取得属性值
System.out.println("id-->" + id);
Element sub1 = item.getChild("company_name");// 取得当前节点的字节点
String company_name = sub1.getText();// 取得当前节点的值
System.out.println("company_name-->" + company_name);
Element sub2 = item.getChild("company_email");
String company_email = sub2.getText();
System.out.println("company_email-->" + company_email);
}
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
JdomRWXML jdomRWXML = new JdomRWXML();
System.out.println("--------BuildXMLDoc----------");
jdomRWXML.BuildXMLDoc();
System.out.println("--------ReadXMLDoc----------");
jdomRWXML.ReadXMLDoc();
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出结果:
--------BuildXMLDoc----------
--------ReadXMLDoc----------
---------------------------
id-->0
company_name-->name0
company_email-->name0@163.com
---------------------------
id-->1
company_name-->name1
company_email-->name1@163.com
---------------------------
id-->2
company_name-->name2
company_email-->name2@163.com
---------------------------
id-->3
company_name-->name3
company_email-->name3@163.com
---------------------------
id-->4
company_name-->name4
company_email-->name4@163.com
然后我们在项目根目录下会发现多了一个company_list.xml文件,内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<list>
<company id="0">
<company_name>name0</company_name>
<company_email>name0@163.com</company_email>
</company>
<company id="1">
<company_name>name1</company_name>
<company_email>name1@163.com</company_email>
</company>
<company id="2">
<company_name>name2</company_name>
<company_email>name2@163.com</company_email>
</company>
<company id="3">
<company_name>name3</company_name>
<company_email>name3@163.com</company_email>
</company>
<company id="4">
<company_name>name4</company_name>
<company_email>name4@163.com</company_email>
</company>
</list>