JDOM对xml的增删改查之SAXBuilder
message.xml文件位于src目录下的xmldom包中
1.message.xml文件:
- <?xml?version="1.0"?encoding="UTF-8"?> ?? <root> ?? ????<person?id="1"> ?? ????????<username>admin</username> ?? ????????<password>password1</password> ?? ????</person> ?? ????<person?id="2"> ?? ????????<username>manager</username> ?? ????????<password>password2</password> ?? ????</person> ?? </root>??
<?xml version="1.0" encoding="UTF-8"?><root> <person id="1"> <username>admin</username> <password>password1</password> </person> <person id="2"> <username>manager</username> <password>password2</password> </person></root>
2.查询数据
- package?xmldom; ?? ?? import?java.io.*; ?? import?java.util.*; ?? import?org.jdom.*; ?? import?org.jdom.input.SAXBuilder; ?? import?org.jdom.output.XMLOutputter; ?? ?? /** ? ?*?xml的增删改查之SAXBuilder ? ?*? ? ?*?@author?Administrator ? ?*? ? ?*/?? public?class?XmlTest?{ ?? ?? ????//?查询所有的数据 ?? ????public?static?void?list()?throws?JDOMException,?IOException?{ ?? ????????SAXBuilder?builder?=?new?SAXBuilder(); ?? ????????String?xmlPath?=?"./src/xmldom/message.xml"; ?? ????????//String?xmlPath?=?"./WebRoot/xml/message.xml"; ?? ????????//?获得文档对象 ?? ????????Document?document?=?builder.build(xmlPath); ?? ????????//?获得根节点 ?? ????????Element?root?=?document.getRootElement(); ?? ????????List?list?=?root.getChildren(); ?? ????????System.out.println("root?:?"?+?root); ?? ????????System.out.println("root.getName?:?"+root.getName()); ?? ????????System.out.println("listSize?:?"+list.size()); ?? ????????Iterator?it?=?list.iterator(); ?? ????????while?(it.hasNext())?{ ?? ????????????Element?e?=?(Element)?it.next(); ?? ????????????System.out.println("ID:?"?+?e.getAttributeValue("id")); ?? ????????????System.out.println("childUsername:"+e.getChildText("username")); ?? ????????????System.out.println("childPassword:"+e.getChildText("password")); ?? ????????} ?? ???????? ?? ????????//for(int?i=0;i<list.size();i++){ ?? ????????//??Element?e?=?(Element)list.get(i); ?? ????????//??... ?? ????????//} ?? ????} ?? ????public?static?void?main(String[]?args)?{ ?? ????????try?{ ?? ????????????XmlTest.list(); ?? ????????}?catch?(JDOMException?e1)?{ ?? ????????????e1.printStackTrace(); ?? ????????}?catch?(IOException?e1)?{ ?? ????????????e1.printStackTrace(); ?? ????????} ?? ????} ?? }??
package xmldom;import java.io.*;import java.util.*;import org.jdom.*;import org.jdom.input.SAXBuilder;import org.jdom.output.XMLOutputter;/** * xml的增删改查之SAXBuilder * * @author Administrator * */public class XmlTest { // 查询所有的数据 public static void list() throws JDOMException, IOException { SAXBuilder builder = new SAXBuilder(); String xmlPath = "./src/xmldom/message.xml"; //String xmlPath = "./WebRoot/xml/message.xml"; // 获得文档对象 Document document = builder.build(xmlPath); // 获得根节点 Element root = document.getRootElement(); List list = root.getChildren(); System.out.println("root : " + root); System.out.println("root.getName : "+root.getName()); System.out.println("listSize : "+list.size()); Iterator it = list.iterator(); while (it.hasNext()) { Element e = (Element) it.next(); System.out.println("ID: " + e.getAttributeValue("id")); System.out.println("childUsername:"+e.getChildText("username")); System.out.println("childPassword:"+e.getChildText("password")); } //for(int i=0;i<list.size();i++){ // Element e = (Element)list.get(i); // ... //} } public static void main(String[] args) { try { XmlTest.list(); } catch (JDOMException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } }}
结果:
- root?:?[Element:?<root/>] ?? root.getName?:?root ?? listSize?:?2?? ID:?1?? childUsername:admin ?? childPassword:password1 ?? ID:?2?? childUsername:manager ?? childPassword:password2??
root : [Element: <root/>]root.getName : rootlistSize : 2ID: 1childUsername:adminchildPassword:password1ID: 2childUsername:managerchildPassword:password2
3.在原有的xml文件中增加数据
- public?static?void?add()?throws?JDOMException,?FileNotFoundException,IOException?{ ?? ????SAXBuilder?builder?=?new?SAXBuilder(); ?? ????String?xmlPath?=?"./src/xmldom/message.xml"; ?? ????Document?document?=?builder.build(xmlPath); ?? ???? ?? ????//获得根节点 ?? ????Element?root?=?document.getRootElement(); ?? ???? ?? ????//创建节点person ?? ????Element?element?=?new?Element("person"); ?? ???? ?? ????//给person节点添加属性id ?? ????element.setAttribute("id",?"3"); ?? ???? ?? ????//给person节点添加子节点并赋值 ?? ????element.addContent(new?Element("username").setText("hello")); ?? ????element.addContent(new?Element("password").setText("woerld")); ?? ???? ?? ????//给父节点添加person子节点 ?? ????root.addContent(element); ?? ?? ????XMLOutputter?output?=?new?XMLOutputter(); ?? ????output.output(document,?new?FileOutputStream(xmlPath)); ?? } ?? ???
public static void add() throws JDOMException, FileNotFoundException,IOException { SAXBuilder builder = new SAXBuilder(); String xmlPath = "./src/xmldom/message.xml"; Document document = builder.build(xmlPath); //获得根节点 Element root = document.getRootElement(); //创建节点person Element element = new Element("person"); //给person节点添加属性id element.setAttribute("id", "3"); //给person节点添加子节点并赋值 element.addContent(new Element("username").setText("hello")); element.addContent(new Element("password").setText("woerld")); //给父节点添加person子节点 root.addContent(element); XMLOutputter output = new XMLOutputter(); output.output(document, new FileOutputStream(xmlPath)); }
测试:
- XmlTest.add();??
XmlTest.add();
结果生成新的xml文件:
- <?xml?version="1.0"?encoding="UTF-8"?> ?? <root> ?? ????<person?id="1"> ?? ????????<username>admin</username> ?? ????????<password>password1</password> ?? ????</person> ?? ????<person?id="2"> ?? ????????<username>manager</username> ?? ????????<password>password2</password> ?? ????</person> ?? ????<person?id="3"> ?? ????????<username>hello</username> ?? ????????<password>woerld</password> ?? ????</person> ?? </root>??
<?xml version="1.0" encoding="UTF-8"?><root> <person id="1"> <username>admin</username> <password>password1</password> </person> <person id="2"> <username>manager</username> <password>password2</password> </person> <person id="3"> <username>hello</username> <password>woerld</password> </person></root>
4.修改xml中数据
a.修改前xml文件:
- <?xml?version="1.0"?encoding="UTF-8"?> ?? <root> ?? ????<person?id="1"> ?? ????????<username?ip="1111111">admin</username> ?? ????????<password>admin</password> ?? ????</person> ?? ????<person?id="2"> ?? ????????<username>manager</username> ?? ????????<password>password2</password> ?? ????</person> ?? ????<person?id="3"> ?? ????????<username>hello</username> ?? ????????<password>woerld</password> ?? ????</person> ?? </root>??
<?xml version="1.0" encoding="UTF-8"?><root> <person id="1"> <username ip="1111111">admin</username> <password>admin</password> </person> <person id="2"> <username>manager</username> <password>password2</password> </person> <person id="3"> <username>hello</username> <password>woerld</password> </person></root>
b.调用方法:
- public?static?void?edit(int?id)?throws?JDOMException, ?? ????????????FileNotFoundException,?IOException?{ ?? ????????SAXBuilder?builder?=?new?SAXBuilder(); ?? ????????Document?document?=?builder.build("./src/xmldom/message.xml"); ?? ????????Element?root?=?document.getRootElement(); ?? ?? ????????List?list?=?root.getChildren(); ?? ????????Iterator?it?=?list.iterator(); ?? ????????for?(int?i?=?0;?i?<?list.size();?i++)?{ ?? ????????????Element?e?=?(Element)?it.next(); ?? ????????????System.out.println("=============="?+?e.getAttributeValue("id")); ?? ????????????if?(Integer.parseInt(e.getAttributeValue("id"))?==?id)?{ ?? ????????????????e.getChild("username").setText("xiaoma"); ?? ????????????????e.getChild("username").setAttribute("ip",?"66666666666"); ?? ????????????????e.getChild("password").setText("xiaoma"); ?? ?? ????????????} ?? ????????} ?? ????????XMLOutputter?output?=?new?XMLOutputter(); ?? ????????output.output(document, ?? ????????????????new?FileOutputStream("./src/xmldom/message.xml")); ?? ????}??
public static void edit(int id) throws JDOMException, FileNotFoundException, IOException { SAXBuilder builder = new SAXBuilder(); Document document = builder.build("./src/xmldom/message.xml"); Element root = document.getRootElement(); List list = root.getChildren(); Iterator it = list.iterator(); for (int i = 0; i < list.size(); i++) { Element e = (Element) it.next(); System.out.println("==============" + e.getAttributeValue("id")); if (Integer.parseInt(e.getAttributeValue("id")) == id) { e.getChild("username").setText("xiaoma"); e.getChild("username").setAttribute("ip", "66666666666"); e.getChild("password").setText("xiaoma"); } } XMLOutputter output = new XMLOutputter(); output.output(document, new FileOutputStream("./src/xmldom/message.xml")); }
c.测试:
- XmlTest.edit(1);??
XmlTest.edit(1);
d.执行后的xml文件:
- <?xml?version="1.0"?encoding="UTF-8"?> ?? <root> ?? ????<person?id="1"> ?? ????????<username?ip="66666666666">xiaoma</username> ?? ????????<password>xiaoma</password> ?? ????</person> ?? ????<person?id="2"> ?? ????????<username>manager</username> ?? ????????<password>password2</password> ?? ????</person> ?? ????<person?id="3"> ?? ????????<username>hello</username> ?? ????????<password>woerld</password> ?? ????</person> ?? </root>??
<?xml version="1.0" encoding="UTF-8"?><root> <person id="1"> <username ip="66666666666">xiaoma</username> <password>xiaoma</password> </person> <person id="2"> <username>manager</username> <password>password2</password> </person> <person id="3"> <username>hello</username> <password>woerld</password> </person></root>
5.删除xml中记录
a.删除前xml文件如上
b.执行方法:
- public?static?void?del(int?id)?throws?JDOMException,?FileNotFoundException, ?? ????????????IOException?{ ?? ????????SAXBuilder?builder?=?new?SAXBuilder(); ?? ????????Document?document?=?builder.build("./src/xmldom/message.xml"); ?? ????????Element?root?=?document.getRootElement(); ?? ?? ????????List?list?=?root.getChildren(); ?? ????????Iterator?it?=?list.iterator(); ?? ?? ????????for?(int?i?=?0;?i?<?list.size();?i++)?{ ?? ????????????Element?e?=?(Element)?it.next(); ?? ????????????if?(Integer.parseInt(e.getAttributeValue("id"))?==?id)?{ ?? ????????????????root.removeContent(e); ?? ????????????????break; ?? ????????????} ?? ????????} ?? ????????//?文件处理 ?? ????????XMLOutputter?out?=?new?XMLOutputter(); ?? ????????out.output(document,?new?FileOutputStream("./src/xmldom/message.xml")); ?? ????}??
public static void del(int id) throws JDOMException, FileNotFoundException, IOException { SAXBuilder builder = new SAXBuilder(); Document document = builder.build("./src/xmldom/message.xml"); Element root = document.getRootElement(); List list = root.getChildren(); Iterator it = list.iterator(); for (int i = 0; i < list.size(); i++) { Element e = (Element) it.next(); if (Integer.parseInt(e.getAttributeValue("id")) == id) { root.removeContent(e); break; } } // 文件处理 XMLOutputter out = new XMLOutputter(); out.output(document, new FileOutputStream("./src/xmldom/message.xml")); }
c.测试:
- XmlTest.del(3);??
XmlTest.del(3);
d.执行后xml文件:
- <?xml?version="1.0"?encoding="UTF-8"?> ?? <root> ?? ????<person?id="1"> ?? ????????<username?ip="66666666666">xiaoma</username> ?? ????????<password>xiaoma</password> ?? ????</person> ?? ????<person?id="2"> ?? ????????<username>manager</username> ?? ????????<password>password2</password> ?? ????</person> ?? ???? ?? </root>??