DOM、JDOM、DOM4J解析XML实例

一、DOM方式

原始name.xml

<学生花名册> <学生 性别="男"> <姓名>李华 <年龄>14 <学生 性别="男"> <姓名>张三 <年龄>16 <学生 性别="女"> <姓名>王娟 <年龄>18

数据模型Student.java

package com.upcgrid.dom; public class Student { private String name; private String sex; private int age; public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } }

DOM方式解析xml文档示例程序

package com.upcgrid.dom; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStreamWriter; import java.util.Vector; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.OutputKeys; import javax.xml.transform.Transformer; import javax.xml.transform.TransformerException; import javax.xml.transform.TransformerFactory; import javax.xml.transform.dom.DOMSource; import javax.xml.transform.stream.StreamResult; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.NodeList; import org.w3c.dom.Text; import org.xml.sax.SAXException; /** * * @author shijin 原始DOM解析XML方式 * */ public class DOMTest { public static void main(String[] args) throws ParserConfigurationException, SAXException, IOException, TransformerException { DOMTest test = new DOMTest(); test.deleteElement("name.xml", "女"); Vector stus = test.changeXMLToModel("name.xml"); for (Student stu : stus) { System.out.print(stu.getName() + " " + stu.getSex() + " " + stu.getAge() + "\n"); } // 输出: // 李华 男 14 // 张三 男 16 test.createDocument("name2.xml", stus); } /** * show 根据vector中的student对象创建xml文档 * * @param filename * 要创建的文档名 * @throws ParserConfigurationException * @throws SAXException * @throws IOException * @throws TransformerException */ public void createDocument(String filename, Vector stus) throws ParserConfigurationException, SAXException, IOException, TransformerException { // 得到DOM解析器的工厂实例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 从DOM工厂获取DOM解析器 DocumentBuilder builder = dbf.newDocumentBuilder(); // 创建document对象 Document doc = builder.newDocument(); Element root = doc.createElement("学生花名册");// 创建根元素 doc.appendChild(root);// 添加根元素 for (Student stu : stus) { Element stuElement = doc.createElement("学生"); stuElement.setAttribute("性别", stu.getSex()); Element nameElement = doc.createElement("姓名"); Text nameText = doc.createTextNode(stu.getName()); nameElement.appendChild(nameText); Element ageElement = doc.createElement("年龄"); Text ageText = doc.createTextNode(String.valueOf(stu.getAge())); ageElement.appendChild(ageText); stuElement.appendChild(nameElement); stuElement.appendChild(ageElement); root.appendChild(stuElement); } FileOutputStream fos = new FileOutputStream(filename); OutputStreamWriter ow = new OutputStreamWriter(fos); // 保存xml文件 DOMSource doms = new DOMSource(doc); // 创建结果输出流 StreamResult result = new StreamResult(ow); // 得到转换工厂实例 TransformerFactory transFac = TransformerFactory.newInstance(); // 得到转换器实例 Transformer trans = transFac.newTransformer(); // 转化器设置输出文档的编码方式 trans.setOutputProperty(OutputKeys.ENCODING, "GB2312"); //设置支持缩进 trans.setOutputProperty(OutputKeys.INDENT, "yes"); // 将文档源转换到结果输出流 trans.transform(doms, result); } /** * show 读取指定XML文档并将其对象化 * * @param filename * @return 存储Student对象的vector * @throws ParserConfigurationException * @throws SAXException * @throws IOException */ public Vector changeXMLToModel(String filename) throws ParserConfigurationException, SAXException, IOException { // 得到DOM解析器的工厂实例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 从DOM工厂获取DOM解析器 DocumentBuilder builder = dbf.newDocumentBuilder(); // 解析xml文档,获得document对象,即DOM树 Document doc = builder.parse(filename); // 获取根节点 Element root = doc.getDocumentElement(); // 获取根节点的子节点中名字为"学生"的节点列表 NodeList stuNodes = root.getElementsByTagName("学生"); Vector students = new Vector(); // 遍历<学生>节点 for (int i = 0; i < stuNodes.getLength(); i++) { // 获取一个学生节点 Element stuNode = (Element) stuNodes.item(i); // 创建一个学生对象 Student stu = new Student(); stu.setSex(stuNode.getAttribute("性别")); // 获取<学生>节点的子节点中名字为"姓名"的节点列表 NodeList nameNodes = stuNode.getElementsByTagName("姓名"); // 取得第一个姓名 Element nameNode = (Element) nameNodes.item(0); stu.setName(nameNode.getTextContent()); // 获取<学生>节点的子节点中名字为"年龄"的节点列表 NodeList ageNodes = stuNode.getElementsByTagName("年龄"); // 取得第一个年龄 Element ageNode = (Element) ageNodes.item(0); stu.setAge(Integer.parseInt(ageNode.getTextContent())); students.add(stu); } return students; } /** * show 删除指定名为filename的xml文档中学生结点的性别属性为tagname的结点 * * @param filename * @param tagname * @throws ParserConfigurationException * @throws SAXException * @throws IOException * @throws TransformerException */ public void deleteElement(String filename, String tagname) throws ParserConfigurationException, SAXException, IOException, TransformerException { // 得到DOM解析器的工厂实例 DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); // 从DOM工厂获取DOM解析器 DocumentBuilder builder = dbf.newDocumentBuilder(); // 解析xml文档,获得document对象,即DOM树 Document doc = builder.parse(filename); // 找到删除节点 NodeList stuNodes = doc.getElementsByTagName("学生"); for (int i = 0; i < stuNodes.getLength(); i++) { Element stuElement = (Element) stuNodes.item(i); String sex = stuElement.getAttribute("性别"); if (sex.equals(tagname)) { stuElement.getParentNode().removeChild(stuElement); } } // 保存xml文件 DOMSource doms = new DOMSource(doc); // 创建结果输出流 StreamResult result = new StreamResult(new FileOutputStream(filename)); // 得到转换工厂实例 TransformerFactory transFac = TransformerFactory.newInstance(); // 得到转换器实例 Transformer trans = transFac.newTransformer(); // 转化器设置输出文档的编码方式 trans.setOutputProperty(OutputKeys.ENCODING, "GB2312"); // 将文档源转换到结果输出流 trans.transform(doms, result); } }

输出:
李华 男 14
张三 男 16
结果name.xml

<学生花名册> <学生 性别="男"> <姓名>李华 <年龄>14 <学生 性别="男"> <姓名>张三 <年龄>16

name2.xml

<学生花名册> <学生 性别="男"> <姓名>李华 <年龄>14 <学生 性别="男"> <姓名>张三 <年龄>16
二、JDOM方式

HD.xml

8G 200 1580 10G 500 3000

JDOM解析XML文档示例

package com.upcgrid.jdom; 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; public class JDOMTest { public static void main(String[] args) throws JDOMException, IOException { // 获得JDOM以SAX方式处理XML文档的构造器 SAXBuilder saxb = new SAXBuilder(); // 通过SAX构造器获得XML文档对象 Document doc = saxb.build(JDOMTest.class.getClassLoader() .getResourceAsStream("test.xml")); // 获取根元素HD Element root = doc.getRootElement(); // 取名字为disk的所有元素 List list = root.getChildren("disk"); for (int i = 0; i < list.size(); i++) { //取得第i个disk节点 Element diskElement = (Element) list.get(i); //取得disk属性name String name = diskElement.getAttributeValue("name"); // 取disk子元素capacity的内容 String capacity = diskElement.getChildText("capacity"); String directories = diskElement.getChildText("directories"); String files = diskElement.getChildText("files"); System.out.println("磁盘信息:"); System.out.println("分区盘符:" + name); System.out.println("分区容量:" + capacity); System.out.println("目录数:" + directories); System.out.println("文件数:" + files); System.out.println("-----------------------------------"); } } }

输出结果:
磁盘信息:
分区盘符:C
分区容量:8G
目录数:200
文件数:1580
-----------------------------------
磁盘信息:
分区盘符:D
分区容量:10G
目录数:500
文件数:3000
-----------------------------------

三、DOM4J方式

User.hbm.xml

aaa bbb >

DOM4J解析XML示例

package com.upcgrid.dom4j; import java.io.File; import java.io.FileWriter; import java.io.IOException; import java.util.Iterator; import java.util.List; import org.dom4j.Attribute; import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j.DocumentHelper; import org.dom4j.Element; import org.dom4j.Node; import org.dom4j.io.OutputFormat; import org.dom4j.io.SAXReader; import org.dom4j.io.XMLWriter; public class DOM4JTest { public static void main(String[] args) { //获得DOM4J以SAX方式处理XML文档的管道 SAXReader reader = new SAXReader(); try { //通过管道获得XML文档对象 Document document = reader.read(new File("User.hbm.xml")); //获取根节点 Element root = document.getRootElement(); System.out.println(root.getName()); Element element = null; //遍历根节点下的节点 for(Iterator i = root.elementIterator();i.hasNext();){ //根节点的子节点 element = (Element) i.next(); System.out.println(element.getName()); //遍历节点属性 for(Iterator j = element.attributeIterator();j.hasNext();){ Attribute attr = (Attribute)j.next(); System.out.println(attr.getName()+":"+attr.getValue()); } //遍历名为"property"的节点 for(Iterator k = element.elementIterator("property");k.hasNext();){ Element e1 = (Element)k.next(); System.out.println(e1.getData()); } } //通过Xpath的方式寻找节点 List list = document.selectNodes("//hibernate-mapping/class/property"); for(Node n: list){ String name = n.valueOf("@name"); System.out.println(n.getName()+" @name:"+name); } //只拿第一个 Node node = document.selectSingleNode("//hibernate-mapping/class"); String name = node.valueOf("@name"); String table = node.valueOf("@table"); System.out.println(node.getName()+" @name:"+name+",@table:"+table); createDocument(); } catch (DocumentException e) { e.printStackTrace(); } } public static Document createDocument(){ //创建document对象 Document document = DocumentHelper.createDocument(); Element root = document.addElement("hibernate-mapping"); //链式编程 Element classElement = root.addElement("class") .addAttribute("name", "com.upcgrid.User") .addAttribute("table", "t_user"); classElement.addElement("property").addAttribute("name", "username").addText("aaa"); classElement.addElement("Property").addAttribute("name", "password").addText("bbb");; try { FileWriter out = new FileWriter("User1.hbm.xml"); document.write(out); out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } try { //设定美化格式 OutputFormat format = OutputFormat.createPrettyPrint(); XMLWriter writer = new XMLWriter(new FileWriter("User2.hbm.xml"),format); writer.write(document); writer.close(); //缩减格式 } catch (IOException e) { e.printStackTrace(); } return document; } }

输出:
hibernate-mapping
class
name:com.upcgrid.User
table:t_user
aaa
bbb
property @name:username
property @name:password
class @name:com.upcgrid.User,@table:t_user
User.hbm.xml

aaabbb

User2.hbm.xml

aaa bbb

你可能感兴趣的:(java,人工智能)