转自:
下文笔者讲述使用JDOM解析XML的方法分享,如下所示:
JDOM简介
JDOM是一个开源项目
它基于树形结构
使用Java代码对XML文档实现解析、生成、序列化及多种操作
JDOM与DOM非常类似 它是处理XML的纯JAVA API API大量使用了Collections类,且JDOM仅使用具体类而不使用接口 JDOM 它自身不包含解析器。它通常使用 SAX2 解析器来解析和验证输入 XML 文档
JDOM定义
JDOM中JAXP是用于XML语法分析的Java API,包含以下包信息:
JDOM解析xml步骤
1.建立解析器 SAXBuilder sb=new SAXBuilder(); //返回Document文档 Document doc=sb.build(new FileInputStream(XmlFname)); 2. DOM处理 元素基于Content类.Element类操作同Dom.详见Java XML解析 - 利用dom(org.w3c.dom)解析XML 3. DOM结果处理(输出/保存) Format fo=Format.getCompactFormat();//取得输出格式Format //fo.setEncoding("GB2312"); XMLOutputter outputter=new XMLOutputter(fo); FileWriter write=new FileWriter(XmlFname);//这里可以是PrintWriter形式的(任何Writer流). outputter.output(doc,write/*Writer流,见构造函数*/); write.close();
例:
JDOM解析xml例子
//xml文件//解析XML testJDOM.java public class testJDOM { public static void main(String[] args) { try { File file = new File("AirPortLine.xml"); SAXBuilder builder = new SAXBuilder(); Document doc = builder.build(file); parseJDOM(doc);// 解析XML文档 } catch (Exception e) { System.out.println("Can't read the file"); } } // 解析XML文档 private static void parseJDOM(Document doc) { Element root = doc.getRootElement(); List lineList = root.getChildren("line");// 也可使用root.getChildren() for (Iterator iter = lineList.iterator(); iter.hasNext();) { Element lineElement = (Element) iter.next();// 获取 1 1 武汉 2 石家庄 3 北京 2 1 重庆 2 武汉 3 上海 4 东京 3 1 上海 2 纽约 元素 String lid = lineElement.getAttributeValue("lid");// 获取 元素的lid属性值 String num = lineElement.getAttributeValue("num");// 获取 元素的num属性值 System.out.println("==lid:" + lid); System.out.println("==num:" + num); Element idElement = lineElement.getChild("id");// 获得 下 标签下的子元素 String id = idElement.getText();// // 获得 下 标签下的子元素值 System.out.println("==路线id:" + id); List stationList = lineElement.getChildren("station");// 获得 下 列表 for (Iterator subIter = stationList.iterator(); subIter.hasNext();) { Element stationElement = (Element) subIter.next();// 获取 元素 Element sidElement = stationElement.getChild("sid");// 获得 下 标签下的子元素 Element snameElement = stationElement.getChild("sname");// 获得 下 标签下的子元素 String sid = sidElement.getText();// 获得 下 标签下的子元素值 String sname = snameElement.getText();// 获得 下 标签下的子元素值 System.out.println("==路线sid:" + sid); System.out.println("==路线sname:" + sname); } } } }
JDOM注意事项:
JDOM对象中,XML元素就是Element的实例
XML属性就是Attribute的实例
XML文档本身就是Document的实例
-------------------------------------------------------------
JDOM对象就是像Document、Element和Attribute这些类的直接实例
创建JDOM对象,直接使用new操作符即可