zoukankan      html  css  js  c++  java
  • java实现xml文件CRUD

    java删除xml多个节点:

    方案1、你直接改动了nodeList。这一般在做循环时是不同意直接这么做的。

    你能够尝试在遍历一个list时,在循环体同一时候删除list里的内容,你会得到一个异常。建议你例如以下处理这个问题: XmlDocument xmlDoc = new XmlDocument(); xmlDoc.Load("11.xml"); XmlNode root = xmlDoc.DocumentElement; XmlNodeList nodeList = root.ChildNodes; List<XmlNode> nodesToRemove = new List<XmlNode>(); foreach (XmlNode node in nodeList) { if (node.Attributes["FileName"] == null || node.Attributes["FileName"].Value == "") { nodesToRemove.Add(node); continue; } //省略此处代码dosomething } foreach (XmlNode node in nodesToRemove)//这里再来做删除 { node.ParentNode.RemoveChild(node); }


    方案2、

     nodelist = xmldoc.SelectSingleNode("employees").ChildNodes;  

    while (true)
     2 {
     3     bool removed = false;
     4     foreach (XmlNode xn in nodelist)
     5    {
     6         if (xn.FirstChild.InnerText.ToString().Contains("a"))
     7        {
     8            xn.ParentNode.RemoveChild(xn);
     9            removed = true;
    10            break;
    11         }
    12     }
    13 
    14     if (!removed)
    15          break;
    16 }



    package com.wss;
    import java.io.File;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.UUID;
    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 org.w3c.dom.Document;
    import org.w3c.dom.Element;
    import org.w3c.dom.Node;
    import org.w3c.dom.NodeList;
    import org.w3c.dom.Text;
    public class GPS_GNSS_XML_Color {
    //删除节点时传入的參数
    private static String deleteNumber;
    //改动节点时传入的參数
    private static String updateNumber;
    //读取传入的路径,返回一个document对象
    public static Document loadInit(String filePath){
    Document document = null;
    try{
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    document = builder.parse(new File(filePath));
    document.normalize();
    return document;
    }catch(Exception e){
    e.printStackTrace();
    System.out.println(e.getMessage());
    return null;
    }
    }

    public static boolean deleteXML(String filePath){
    deleteNumber = "421f481e-790c-41be-91e3-27d215b73ce2";
    Document document = loadInit(filePath);
    try{
    NodeList nodeList = document.getElementsByTagName_r("color");
    for(int i=0; i<nodeList.getLength(); i++){
    String number_ = document.getElementsByTagName_r("number").item(i).getFirstChild().getNodeValue();
    //删除节点时传入的參数
    if(number_.equals(deleteNumber)){
    Node node = nodeList.item(i);
    node.getParentNode().removeChild(node);
    saveXML(document, filePath);
    }
    }
    return true;
    }catch(Exception e){
    e.printStackTrace();
    System.out.println(e.getMessage());
    return false;
    }
    }

    public static boolean updateXML(String filePath){
    updateNumber = "421f481e-790c-41be-91e3-27d215b73ce2";
    //读取传入的路径,返回一个document对象
    Document document = loadInit(filePath);
    try{
    //获取叶节点
    NodeList nodeList = document.getElementsByTagName_r("color");
    //遍历叶节点
    for(int i=0; i<nodeList.getLength(); i++){
    String number = document.getElementsByTagName_r("number").item(i).getFirstChild().getNodeValue();
    String colorValue = document.getElementsByTagName_r("colorValue").item(i).getFirstChild().getNodeValue();
    Double minValue = Double.parseDouble(document.getElementsByTagName_r("minValue").item(i).getFirstChild().getNodeValue());
    Double maxValue =Double.parseDouble(document.getElementsByTagName_r("maxValue").item(i).getFirstChild().getNodeValue());
    //改动节点时传入的參数
    if(number.equals(updateNumber)){
    document.getElementsByTagName_r("colorValue").item(i).getFirstChild().setNodeValue("black");
    document.getElementsByTagName_r("minValue").item(i).getFirstChild().setNodeValue("2222");
    document.getElementsByTagName_r("maxValue").item(i).getFirstChild().setNodeValue("22222");
    System.out.println();
    }
    }
    saveXML(document, filePath);
    return true;
    }catch(Exception e){
    e.printStackTrace();
    System.out.println(e.getMessage());
    return false;
    }
    }

    public static boolean addXML(String filePath){
    try{
    //读取传入的路径。返回一个document对象
    Document document = loadInit(filePath);
    //创建叶节点
    Element eltColor = document.createElement_x("color");
    Element eltNumber = document.createElement_x("number");//创建叶节点的第一个元素
    Element eltColorValue = document.createElement_x("colorValue");//创建叶节点的第二个元素
    Element eltMinValue = document.createElement_x("minValue");//创建叶节点的第三个元素
    Element eltMaxValue = document.createElement_x("maxValue");//创建叶节点的第四个元素
    Text number_ = document.createTextNode(UUID.randomUUID().toString());//创建叶节点的第一个元素下的文本节点
    eltNumber.appendChild(number_);//把该文本节点增加到叶节点的第一个元素里面
    Text colorValue_ = document.createTextNode("colorValue");//创建叶节点的第二个元素下的文本节点
    eltColorValue.appendChild(colorValue_);//把该文本节点增加到叶节点的第二个元素里面
    Text minValue_ = document.createTextNode("100");//创建叶节点的第三个元素下的文本节点
    eltMinValue.appendChild(minValue_);//把该文本节点增加到叶节点的第三个元素里面
    Text maxValue_ = document.createTextNode("200");//创建叶节点的第四个元素下的文本节点
    eltMaxValue.appendChild(maxValue_);//把该文本节点增加到叶节点的第四个元素里面
    //把叶节点下的元素增加到叶节点下
    eltColor.appendChild(eltNumber);
    eltColor.appendChild(eltColorValue);
    eltColor.appendChild(eltMinValue);
    eltColor.appendChild(eltMaxValue);
    //获取根节点
    Element eltRoot = document.getDocumentElement();
    //把叶节点增加到根节点下
    eltRoot.appendChild(eltColor);
    //更新改动后的源文件
    saveXML(document, filePath);
    return true;
    }catch(Exception e){
    e.printStackTrace();
    System.out.println(e.getMessage());
    return false;
    }
    }

    public static boolean saveXML(Document document, String filePath){
    try{
    TransformerFactory tFactory = TransformerFactory.newInstance();
    Transformer transformer = tFactory.newTransformer();
    DOMSource source = new DOMSource(document);
    StreamResult result = new StreamResult(new File(filePath));
    transformer.transform(source, result);
    return true;
    }catch(Exception e){
    e.printStackTrace();
    System.out.println(e.getMessage());
    return false;
    }
    }

    public static List<ColorValue> selectXML(String filePath){
    List<ColorValue> colorValueList = new ArrayList<ColorValue>();
    try{
    //读取传入的路径,返回一个document对象
    Document document = loadInit(filePath);
    //获取叶节点
    NodeList nodeList = document.getElementsByTagName_r("color");
    //遍历叶节点
    for(int i=0; i<nodeList.getLength(); i++){
    ColorValue colorValue = new ColorValue();
    String number_ = document.getElementsByTagName_r("number").item(i).getFirstChild().getNodeValue();
    String colorValue_ = document.getElementsByTagName_r("colorValue").item(i).getFirstChild().getNodeValue();
    Double minValue_ = Double.parseDouble(document.getElementsByTagName_r("minValue").item(i).getFirstChild().getNodeValue());
    Double maxValue_ = Double.parseDouble(document.getElementsByTagName_r("maxValue").item(i).getFirstChild().getNodeValue());
    colorValue.setNumber(number_);
    colorValue.setColorValue(colorValue_);
    colorValue.setMinValue(minValue_);
    colorValue.setMaxValue(maxValue_);
    colorValueList.add(colorValue);
    }
    return colorValueList;
    }catch(Exception e){
    e.printStackTrace();
    System.out.println(e.getMessage());
    return null;
    }
    }
    }

    package com.wss;
    public class ColorValue {
    private String number;
    private String colorValue;
    private Double minValue;
    private Double maxValue;
    public String getNumber() {
    return number;
    }
    public void setNumber(String number) {
    this.number = number;
    }
    public String getColorValue() {
    return colorValue;
    }
    public void setColorValue(String colorValue) {
    this.colorValue = colorValue;
    }
    public Double getMinValue() {
    return minValue;
    }
    public void setMinValue(Double minValue) {
    this.minValue = minValue;
    }
    public Double getMaxValue() {
    return maxValue;
    }
    public void setMaxValue(Double maxValue) {
    this.maxValue = maxValue;
    }
    }

    <?

    xml version="1.0" encoding="UTF-8" standalone="no"?

    >
    <Colors>
    <color>
    <number>7007b384-fab3-4779-9171-229d0664b6b5</number>
    <colorValue>black</colorValue>
    <minValue>2222</minValue>
    <maxValue>22222</maxValue>
    </color>
    <color>
    <number>421f481e-790c-41be-91e3-27d215b73ce2</number>
    <colorValue>colorValue</colorValue>
    <minValue>100</minValue>
    <maxValue>200</maxValue>
    </color>
    </Colors>



    xml的初始化及增删改查操作: 


    //初始化 
       private void btnInitActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnInitActionPerformed 
           // TODO add your handling code here: 
           try { 
               File file = new File("books.xml"); 
               DocumentBuilderFactory docFactory = DocumentBuilderFactory. 
                                                   newInstance(); 
               DocumentBuilder builder = docFactory.newDocumentBuilder(); 

               if (!file.exists()) { 
                   doc = builder.newDocument(); 
                   Element books = doc.createElement("books"); 
                   doc.appendChild(books); 
               } else { 
                   doc = builder.parse(file); 
               } 
               this.jTextArea1.setText("初始化完毕"); 
           } catch (Exception ex) { 
               this.jTextArea1.setText("初始化失败"); 
           } 
       }//GEN-LAST:event_btnInitActionPerformed 

       private void btnSaveActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSaveActionPerformed 
           // TODO add your handling code here: 
           try { 
               TransformerFactory tfactory = TransformerFactory.newInstance(); 
               Transformer transformer = tfactory.newTransformer(); 
               transformer.setOutputProperty(OutputKeys.INDENT, "yes"); 

               DOMSource source = new DOMSource(doc); 
               StreamResult result = new StreamResult(new File("books.xml")); 

               transformer.transform(source, result); 

               this.jTextArea1.setText("保存成功"); 
           } catch (Exception ex) { 
               this.jTextArea1.setText("保存失败"); 
           } 
       }//GEN-LAST:event_btnSaveActionPerformed 

       private void btnShowActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnShowActionPerformed 
           // TODO add your handling code here: 
           if (doc != null) { 
               Element books = doc.getDocumentElement(); 
               this.jTextArea1.setText(books.getNodeName()); 

               NodeList nl = null; 
               nl = books.getChildNodes(); 
               for (int i = 0; i < nl.getLength(); i++) { 
                   Node node = nl.item(i); 
                   //节点类型,元素1/属性2/文本3/凝视8/文档9 
                   if (node.getNodeType() == 1) { 
                       this.jTextArea1.append(" " + node.getNodeName()); 
                       NodeList nsubs = node.getChildNodes(); 
                       for (int j = 0; j < nsubs.getLength(); j++) { 
                           if (nsubs.item(j).getNodeType() == 1 && 
                               nsubs.item(j).getFirstChild() != null) { 
                               this.jTextArea1.append(" " + 
                                       nsubs.item(j).getNodeName() + " : " + 
                                       nsubs.item(j).getFirstChild(). 
                                       getNodeValue()); 
                           } 
                       } 
                   } 
               } 
           } 
       }//GEN-LAST:event_btnShowActionPerformed 

       private void btnShow2ActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnShow2ActionPerformed 
           // TODO add your handling code here: 
           String msg = ""; 
           if (doc != null){ 
               NodeList nl = doc.getElementsByTagName("*"); 
               
               for (int i=0;i<nl.getLength();i++){ 
                   Element e = (Element)nl.item(i); 

                   //得到属性 
                   NamedNodeMap nnm = e.getAttributes(); 
                   msg += "元素:" + e.getNodeName() +":" + e.getFirstChild().getNodeValue() + " "; 

                   for (int k=0;k<nnm.getLength();k++){ 
                       Attr att = (Attr)nnm.item(k); 
                       msg += " 属性有 "+ att.getNodeName() + ":" + att.getNodeValue()+" "; 
                   } 
               } 
           } 
           this.jTextArea1.setText(msg); 
       }//GEN-LAST:event_btnShow2ActionPerformed 

       private void btnSearchActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnSearchActionPerformed 
           // TODO add your handling code here: 
           Node node = Search(this.jTextField1.getText()); 
           if (node != null) { 
               this.jTextArea1.setText("找到了此元素"); 
               this.jTextArea1.append(" 书籍编号  : " + this.jTextField1.getText()); 
               NodeList list = node.getChildNodes(); 
               for (int i = 0; i < list.getLength(); i++) { 
                   Node sub = list.item(i); 
                   if (sub.getNodeType() == 1 && sub.getFirstChild() != null) { 
                       this.jTextArea1.append(" " + sub.getNodeName() + "  : " + 
                                              sub.getFirstChild().getNodeValue()); 
                   } 
               } 
           } 
           else { 
               this.jTextArea1.setText("找不到此元素"); 
           } 
       }//GEN-LAST:event_btnSearchActionPerformed 

       private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnAddActionPerformed 
           // TODO add your handling code here: 

           try { 
               //创建元素 
               Element elemBook = doc.createElement("book"); 
               //加入到根元素底下 
               doc.getDocumentElement().appendChild(elemBook); 

               //为book元素设置属性 
               Attr attrId = doc.createAttribute("id"); //创建 
               attrId.setNodeValue(this.jTextField1.getText()); //设置值 
               elemBook.setAttributeNode(attrId); //设置到book元素 

               //为book元素加入子元素name 
               Element elemNode = doc.createElement("name"); //创建 
               Text textNode = doc.createTextNode(this.jTextField2.getText()); //创建文本节点 
               elemNode.appendChild(textNode); //为name子元素指定文本 
               elemBook.appendChild(elemNode); //加入为book的子元素 

               //为book元素加入子元素price 
               elemNode = doc.createElement("price"); //创建 
               textNode = doc.createTextNode(this.jTextField3.getText()); //创建文本节点 
               elemNode.appendChild(textNode); //为price子元素指定文本 
               elemBook.appendChild(elemNode); //加入为book的子元素 

               //为book元素加入子元素pub 
               elemNode = doc.createElement("pub"); //创建 
               textNode = doc.createTextNode(this.jTextField4.getText()); //创建文本节点 
               elemNode.appendChild(textNode); //为pub子元素指定文本 
               elemBook.appendChild(elemNode); //加入为book的子元素 

               //为book元素加入子元素author 
               elemNode = doc.createElement("author"); //创建 
               textNode = doc.createTextNode(this.jTextField5.getText()); //创建文本节点 
               elemNode.appendChild(textNode); //为author子元素指定文本 
               elemBook.appendChild(elemNode); 

               this.jTextArea1.setText("加入成功"); 
           } catch (Exception ex) { 
               this.jTextArea1.setText("加入失败"); 
           } 
       }//GEN-LAST:event_btnAddActionPerformed 

       private void btnModifyActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnModifyActionPerformed 
           // TODO add your handling code here: 
           Node node = Search(this.jTextField1.getText()); 
           String[] values = {this.jTextField2.getText(), this.jTextField3.getText(), 
                             this.jTextField4.getText(), this.jTextField5.getText()}; 
           if (node != null) { 
               NodeList nl = node.getChildNodes(); 
               int k = 0; 
               for (int i = 0; i < nl.getLength(); i++) { 
                   Node n = nl.item(i); 
                   if (n.getNodeType() == 1) { 
                       Node newNode = doc.createTextNode(values[k]); 
                       if (n.getFirstChild() != null) { 
                           n.replaceChild(newNode, n.getFirstChild()); 
                       } else { 
                           n.appendChild(newNode); 
                       } 
                       k = k + 1; 
                   } 
               } 
               this.jTextArea1.setText("改动成功"); 
           } else { 
               this.jTextArea1.setText("找不到要改动的节点"); 
           } 
       }//GEN-LAST:event_btnModifyActionPerformed 

       private void btnDelActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_btnDelActionPerformed 
           // TODO add your handling code here: 
           Node node = Search(this.jTextField1.getText()); 
           if (node != null) { 
               Node parent = node.getParentNode(); 
               parent.removeChild(node); 

               this.jTextArea1.setText("删除成功"); 
           } else { 
               this.jTextArea1.setText("找不到要删除的节点"); 
           } 
       }//GEN-LAST:event_btnDelActionPerformed 

       private Node Search(String id) { 
           Node node = null; 
           Element books = doc.getDocumentElement(); 
           NodeList nl = null; 
           if (books.hasChildNodes()) { 
               nl = books.getChildNodes(); 
               for (int i = 0; i < nl.getLength(); i++) { 
                   node = nl.item(i); 
                   if (node.getNodeType() == 1) { 
                       Element ele = (Element) node; 
                       if (ele.getAttribute("id").equals(id)) { 
                           return node; 
                       } 
                   } 
               } 
           } 
           return null; 
       } 
  • 相关阅读:
    网络基础之网络协议篇
    JVM-07-执行引擎
    JVM-06-对象实例化、内存布局、访问定位以及直接内存
    JVM-05-方法区
    JVM-04-堆
    JVM-03-本地方法接口和本地方法栈
    JVM-02-程序计数器 虚拟机栈
    JVM-01-类加载子系统
    JVM-00-引言
    swagger
  • 原文地址:https://www.cnblogs.com/yxwkf/p/4593145.html
Copyright © 2011-2022 走看看