JDOM是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序。它的设计包含 Java 语言的语法乃至语义。
JDOM包含有以下几个组件:
org.jdom包含了所有的xml文档要素的java类
org.jdom.adapters包含了与dom适配的java类
org.jdom.filter包含了xml文档的过滤器类
org.jdom.input包含了读取xml文档的类
org.jdom.output包含了写入xml文档的类
org.jdom.transform包含了将jdomxml文档接口转换为其他xml文档接口
org.jdom.xpath包含了对xml文档xpath操作的类
测试类:JDomParse.java
import java.io.FileNotFoundException; import java.io.FileOutputStream; 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; import org.jdom.output.XMLOutputter; public class JDomParse { /** * 打印xmlpath的内容 * @param xmlpath */ public void printXmlContent(String xmlpath){ //用JDOM首先要指定使用什么解析器 SAXBuilder builder = new SAXBuilder(false); try { //得到Document,我们以后要进行的所有操作都是对这个Document操作的 Document doc = builder.build(xmlpath); //得到根元素: Element books = doc.getRootElement(); //得到元素(节点)的集合 List booklist = books.getChildren("book"); //遍历 for (Iterator iter = booklist.iterator(); iter.hasNext();) { Element book = (Element) iter.next(); String email = book.getAttributeValue("email"); System.out.println(email); String name = book.getChildTextTrim("name"); System.out.println(name); //book.getChild("name").setText("bbbb"); //修改name节点的值 String price = book.getChildTextTrim("price"); System.out.println(price); } //保存Document的修改到XML文件中 // XMLOutputter outputter = new XMLOutputter(); // outputter.output(doc, new FileOutputStream(xmlpath)); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (JDOMException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * 打印xmlpath的结构 * @param xmlpath * */ public void printArch(String xmlpath){ //用JDOM首先要指定使用什么解析器 SAXBuilder builder = new SAXBuilder(false); //得到Document,我们以后要进行的所有操作都是对这个Document操作的 try{ Document doc = builder.build(xmlpath); //得到根元素: Element root = doc.getRootElement(); System.out.println("<"+root.getName()+">"); //System.out.println(root.getChildren().size()); List children = root.getChildren(); Iterator it = children.iterator(); while(it.hasNext()){ Element e = (Element)it.next(); System.out.println("\t<"+e.getName()+">"); //找e的子节点 Iterator it_e = e.getChildren().iterator(); while(it_e.hasNext()){ Element e_c = (Element)it_e.next(); System.out.println("\t\t<"+e_c.getName()+">"); System.out.println("\t\t</"+e_c.getName()+">"); } System.out.println("\t</"+e.getName()+">"); } System.out.println("</"+root.getName()+">"); }catch(Exception e){ e.printStackTrace(); } } //main方法测试 public static void main(String[] args) { JDomParse parser = new JDomParse(); //测试printXmlContent()方法 String xmlpath = "D:/test.xml"; parser.printXmlContent(xmlpath); //测试printArch() String xmlpath1 = "D:/test.xml"; parser.printArch(xmlpath1); } } }
所用XML文件test.xml
<?xml version="1.0" encoding="UTF-8"?> <books> <book email="test@163.com"> <name>计算机应用</name> <price>60.0</price> </book> <book email="test2@163.com"> <name>网络技术</name> <price>30.0</price> </book> </books>
运行结果显示: