java使用DOM对XML文档进行增删改查操作实例代码
程序员文章站
2023-12-03 10:16:46
本文研究的主要是java使用dom对xml文档进行增删改查操作的相关代码,具体实例如下所示。
源代码:
package com.zc.homework18;...
本文研究的主要是java使用dom对xml文档进行增删改查操作的相关代码,具体实例如下所示。
源代码:
package com.zc.homework18; import java.io.file; import javax.xml.parsers.documentbuilder; import javax.xml.parsers.documentbuilderfactory; import javax.xml.transform.transformer; import javax.xml.transform.transformerfactory; import javax.xml.transform.dom.domsource; import javax.xml.transform.stream.streamresult; import javax.xml.xpath.xpath; import javax.xml.xpath.xpathconstants; import javax.xml.xpath.xpathexpressionexception; import javax.xml.xpath.xpathfactory; import org.w3c.dom.document; import org.w3c.dom.element; import org.w3c.dom.node; import org.w3c.dom.nodelist; public class xmlwriter { private static string xmlpath = "src\\com\\zc\\homework18\\myxml.xml"; public static void getfamilymemebers() { /* * 创建文件工厂实例 */ documentbuilderfactory dbf = documentbuilderfactory.newinstance(); // 如果创建的解析器在解析xml文档时必须删除元素内容中的空格,则为true,否则为false dbf.setignoringelementcontentwhitespace(true); try { /* * 创建文件对象 */ documentbuilder db = dbf.newdocumentbuilder();// 创建解析器,解析xml文档 document doc = db.parse(xmlpath); // 使用dom解析xml文件 /* * 历遍列表,进行xml文件的数据提取 */ // 根据节点名称来获取所有相关的节点 nodelist sonlist = doc.getelementsbytagname("son"); for (int i = 0; i < sonlist.getlength(); i++) // 循环处理对象 { // 节点属性的处理 element son = (element) sonlist.item(i); // 循环节点son内的所有子节点 for (node node = son.getfirstchild(); node != null; node = node .getnextsibling()) { // 判断是否为元素节点 if (node.getnodetype() == node.element_node) { string name = node.getnodename(); string value = node.getfirstchild().getnodevalue(); system.out.println(name + " : " + value); } } } } catch (exception e) { system.out.println(e.getmessage()); } } // 修改 public static void modifyson() { // 创建文件工厂实例 documentbuilderfactory dbf = documentbuilderfactory.newinstance(); dbf.setignoringelementcontentwhitespace(true); try { // 从xml文档中获取dom文档实例 documentbuilder db = dbf.newdocumentbuilder(); // 获取document对象 document xmldoc = db.parse(xmlpath); // 获取根节点 element root = xmldoc.getdocumentelement(); // 定位id为001的节点 element per = (element) selectsinglenode("/father/son[@id='001']", root); // 将age节点的内容更改为28 per.getelementsbytagname("age").item(0).settextcontent("28"); // 保存 transformerfactory factory = transformerfactory.newinstance(); transformer former = factory.newtransformer(); former.transform(new domsource(xmldoc), new streamresult(new file( xmlpath))); } catch (exception e) { system.out.println(e.getmessage()); } } // 获取目标节点,进行删除,最后保存 public static void discardson() { documentbuilderfactory dbf = documentbuilderfactory.newinstance(); dbf.setignoringelementcontentwhitespace(true); try { documentbuilder db = dbf.newdocumentbuilder(); document xmldoc = db.parse(xmlpath); // 获取根节点 element root = xmldoc.getdocumentelement(); // 定位根节点中的id=002的节点 element son = (element) selectsinglenode("/father/son[@id='002']", root); // 删除该节点 root.removechild(son); // 保存 transformerfactory factory = transformerfactory.newinstance(); transformer former = factory.newtransformer(); former.transform(new domsource(xmldoc), new streamresult(new file( xmlpath))); } catch (exception e) { system.out.println(e.getmessage()); } } // 新增节点 public static void createson() { // 创建文件工厂实例 documentbuilderfactory dbf = documentbuilderfactory.newinstance(); dbf.setignoringelementcontentwhitespace(false); try { documentbuilder db = dbf.newdocumentbuilder(); // 创建document对象 document xmldoc = db.parse(xmlpath); // 获取根节点 element root = xmldoc.getdocumentelement(); // 创建节点son,设置对应的id为004 element son = xmldoc.createelement("son"); son.setattribute("id", "004"); // 创建节点name element name = xmldoc.createelement("name"); name.settextcontent("小儿子"); son.appendchild(name); // 创建节点age element age = xmldoc.createelement("age"); age.settextcontent("0"); son.appendchild(age); // 把son添加到根节点中 root.appendchild(son); // 保存 transformerfactory factory = transformerfactory.newinstance(); transformer former = factory.newtransformer(); former.transform(new domsource(xmldoc), new streamresult(new file( xmlpath))); } catch (exception e) { system.out.println(e.getmessage()); } } // 修改节点信息 public static node selectsinglenode(string express, element source) { node result = null; //创建xpath工厂 xpathfactory xpathfactory = xpathfactory.newinstance(); //创建xpath对象 xpath xpath = xpathfactory.newxpath(); try { result = (node) xpath.evaluate(express, source, xpathconstants.node); system.out.println(result); } catch (xpathexpressionexception e) { system.out.println(e.getmessage()); } return result; } // 打印 public static void main(string[] args) { getfamilymemebers(); system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); modifyson(); system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); system.out.println("修改数据"); getfamilymemebers(); system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); discardson(); system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); system.out.println("删除数据"); getfamilymemebers(); system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); createson(); system.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"); system.out.println("添加数据"); getfamilymemebers(); } }
xml文件
<?xml version="1.0" encoding="utf-8" standalone="no"?> <father> <son id="001"> <name>老大</name> <age>20</age> </son> <son id="002"> <name>老二</name> <age>18</age> </son> <son id="003"> <name>老三</name> <age>13</age> </son> </father>
总结
以上就是本文关于java使用dom对xml文档进行增删改查操作实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!