xml解析——增删改查操作后将其修改结果保存

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了xml解析——增删改查操作后将其修改结果保存相关的知识,希望对你有一定的参考价值。

一、可扩展标记语言xml:Extensible Markup Language 
   1、XML的作用:1)统一数据传输的格式。2)做小型数据库[文件型数据库]。3)做配置文件  .ini   .propertity  .xml  .cfg 
   2、XML文件的基本格式: 
     标签:分为双标签和单标签,双标签的开头和结尾标签名必须一致,大小写一样,/ 开头的是结尾标签,单标签必须在 > 前加上 / 来结尾,单标签中不能放文本。 
     属性:在开始标签中定义一些名值对,值一定是字符串 
   3、XML文件的基本构成: 
     1)在第一行是XML声明    <?xml version="1.0" encoding="UTF-8"  ?> 
     2)必须且只能有一对根标签 
     3)标签可以一层一层嵌 

二、写一个简单的xml文档stus.xml然后用Dom进行解析。 下载
    DOM : Document Object Model 文档对象模型 
    DOM解析的基本思路:将整个XML文件一次性读入内存,将整个XML看做一棵文档树,XML中的每一个标签,属性,文本都看做是树上的一个结点,然后可以对结点进行增删改查的操作。 
   已经编辑好的stus.xml文档 

Java代码  下载

  1. <?xml version="1.0" encoding="UTF-8"?>  

  2. <stus Class="1401" >  

  3.     <stu num="01">  

  4.         <name>张三</name>  

  5.         <age>19</age>  

  6.         <sex>男</sex>  

  7.     </stu>  

  8.     <stu  num="02">  

  9.         <name>李四</name>  

  10.         <age>20</age>  

  11.         <sex>女</sex>  

  12.     </stu>  

  13.     <stu  num="03">  

  14.         <name>王五</name>  

  15.         <age>21</age>  

  16.         <sex>男</sex>  

  17.     </stu>  

  18. </stus>  



三、开始解析 
    创建解析工厂 

Java代码  下载

  1. // 得到解析工厂对象  

  2.         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();  

  3.         // 生产一个解析器对象  

  4.         DocumentBuilder builder = factory.newDocumentBuilder();  

  5.         // 开始解析xml文件,得到的解析结果是一个Document对象,Document对象叫做文档树对象  

  6.         Document document = builder.parse("stus.xml");  


    1、增加节点 
    基本思路:首先创建一个新的元素节点,将元素节点追加到根节点后面,设置其节点属性。创建标签,设置标签文本内容,最后将新标签添加到新的元素节点中。 
代码: 下载

Java代码  

  1. // 创建一个新的元素节点  

  2.         Element stu = dom.createElement("stu");  

  3.         // 将元素节点追加到根节点后面  

  4.         root.appendChild(stu);  

  5.         // 设置节点属性  

  6.         stu.setAttribute("num""04");  

  7.         // 创建标签  

  8.         Element name = dom.createElement("name");  

  9.         Element age = dom.createElement("age");  

  10.         Element sex = dom.createElement("sex");  

  11.         // 设置标签文本内容  

  12.         name.setTextContent("赵六");  

  13.         age.setTextContent("19");  

  14.         sex.setTextContent("女");  

  15.         // 把标签添加到新的元素节点stu中  

  16.         stu.appendChild(name);  

  17.         stu.appendChild(age);  

  18.         stu.appendChild(sex);  


    2、删除节点 
基本思路:获得要删除的节点,然后得到节点的属性值,与要删除的节点的属性值进行比较,如果该属性值对应的节点存在则移除该节点。 
代码: 下载

Java代码  

  1. // 获得根节点  

  2.         Element root = (Element) dom.getFirstChild();  

  3.         // 获得所有stu节点  

  4.         NodeList list = dom.getElementsByTagName("stu");  

  5.         for (int i = 0; i < list.getLength(); i++) {  

  6.             Node node = list.item(i);  

  7.             if (node instanceof Element) {  

  8.                 Element e = (Element) node;  

  9.                 // 得到节点的属性值,与要删除的结点的属性值进行比较,然后移除该属性值对应的结点  

  10.                 String num = e.getAttribute("num");  

  11.                 if (num.equals("02")) {  

  12.                     root.removeChild(e);  

  13.                     break;  

  14.                 }  

  15.             }  

  16.         }  



    3、修改节点 
基本思路:获得要修改的节点,修改其属性值,然后获得该节点下的标签,修改标签中的文本内容。 
代码: 下载

Java代码  

  1. // 修改节点属性  

  2.         for (int j = 0; j < list.getLength(); j++) {  

  3.             Node no = list.item(j);  

  4.             if (no instanceof Element) {  

  5.                 Element el = (Element) no;  

  6.                 String n = el.getAttribute("num");  

  7.                 if (n.contains("01")) {  

  8.                     el.setAttribute("num""05");  

  9.                     // 修改标签值  

  10.                     NodeList li = el.getChildNodes();  

  11.                     for (int x = 0; x < li.getLength(); x++) {  

  12.                         Node d = li.item(x);  

  13.                         if (d instanceof Element) {  

  14.                             Element ee = (Element) d;  

  15.                             String noN = ee.getNodeName();  

  16.                             if (noN.equals("name")) {  

  17.                                 ee.setTextContent("小白");  

  18.                             } else if (noN.equals("age")) {  

  19.                                 ee.setTextContent("11");  

  20.                             } else if (noN.equals("sex")) {  

  21.                                 ee.setTextContent("男");  

  22.                             }  

  23.                         }  

  24.                     }  

  25.                 }  



4、查找节点 
基本思路:获得所有的节点,用 需要查找的结点的属性值与所有节点进行比较,如果该节点存在,就打印该节点的属性值及其节点下标签的内容。 
代码: 下载

Java代码  

  1. for (int j = 0; j < list.getLength(); j++) {  

  2.     Node no = list.item(j);  

  3.     if (no instanceof Element) {  

  4.         Element el = (Element) no;  

  5.         String n = el.getAttribute("num");  

  6.         //查找节点,显示其属性值及标签内容  

  7.         if(n.equals("03")){  

  8.             System.out.println(no.getNodeName()+"\t"+n+no.getTextContent());  

  9.         }  

  10.     }  

  11. }  




4、保存修改后的xml文档 
基本思路:先将内存中的Document对象写到xml文件中,然后将整个Document对象作为要写入xml文件的数据源,最后将数据源写入目标文件。 
代码: 下载

Java代码  

  1. // 将内存中的Document对象写到xml文件中  

  2.         TransformerFactory tf = TransformerFactory.newInstance();  

  3.         Transformer former = tf.newTransformer();  

  4.         former.setParameter("version""1.0");  

  5.         former.setParameter("encoding""GBK");  

  6.         // 将整个Document对象作为要写入xml文件的数据源  

  7.         DOMSource xmlSource = new DOMSource(dom);  

  8.         // 要写入的目标文件  

  9.         StreamResult outputTarget = new   

  10.                 StreamResult(new File("F:\\stus2.xml"));  

  11.         former.transform(xmlSource, outputTarget);  


以上是关于xml解析——增删改查操作后将其修改结果保存的主要内容,如果未能解决你的问题,请参考以下文章

Linq to XML 增删改查

GeoServer通过WFS对feature实现增删改查

mybatis生成的增删改查怎么用

对xml文件的sax解析(增删改查)之二

ssm 框架实现增删改查CRUD操作(Spring + SpringMVC + Mybatis 实现增删改查)

Linq To Xml操作XML增删改查