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("\n\t" + 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("\n\t\t" + 

                                   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() + "\n"; 



               for (int k=0;k<nnm.getLength();k++){ 

                   Attr att = (Attr)nnm.item(k); 

                   msg += "\t属性有\t"+ att.getNodeName() + ":" + att.getNodeValue()+"\n"; 

               } 

           } 

       } 

       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("\n\t书籍编号 \t: " + 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("\n\t" + sub.getNodeName() + " \t: " + 

                                          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; 

   } 

java实现xml文件CRUD的更多相关文章

  1. # java对xml文件的基本操作

    下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...

  2. 用java操作XML文件(DOM解析方式)

    XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...

  3. java对xml文件做增删改查------摘录

    java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...

  4. 更新java对xml文件的操作

    //更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...

  5. Java操作xml文件

    Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...

  6. java 读取XML文件作为配置文件

    首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...

  7. java读XML文件

    XML文件设计为传输和存储数据,其焦点为数据内容. HTML设计为用来显示数据, 其焦点为数据外观. XML仅仅是文本文件,任何文本编辑器一般情况下都能对其进行编辑. XML没有预定义的标签,并且设定 ...

  8. java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .

    背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...

  9. java读取XML文件的四种方式

    java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...

随机推荐

  1. MySQL中同一时候存在创建和上次更新时间戳字段解决方法浅析

    在写这篇文章之前.明白我的MySQL版本号. mysql> SELECT VERSION(); +------------+ | VERSION() | +------------+ | 5.5 ...

  2. IT痴汉的工作现状18-思维定式

    前阵子周权出差给我带回来一个净水器,是直接安装在水龙头上的,小巧方便.我依照安装说明一步一步组装好了,感觉说明书还是比較靠谱的,没有遇到意外.但我发现它的净水.原水的button好像是有问题.它的结构 ...

  3. callback用法简介

    源地址:https://argcv.com/articles/2669.c callback,函数的回调,从ANSI C开始,一直被广为使用.无论是windows API的所谓消息机制,动态链接库的调 ...

  4. 14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量

    14.4.7 Configuring the Number of Background InnoDB IO Threads 配置 后台InnoDB IO Threads的数量 InnoDB 使用bac ...

  5. 使用PageHeap.EXE或GFlags.EXE检查内存越界错误

    必先利其器之一:使用PageHeap.EXE或GFlags.EXE检查内存越界错误 Article last modified on 2002-6-3 ------------------------ ...

  6. Inside Qt Series (全集)

    Inside Qt 系列 QObject这个 class 是 QT 对象模型的核心,绝大部分的 QT 类都是从这个类继承而来.这个模型的中心特征就是一个叫做信号和槽(signaland slot)的机 ...

  7. iOS中的字符串NSString

    创建一个字符串对象: NSstring * str1 = @"hello world"; NSString * str = [[NSString alloc]initWithStr ...

  8. servlet其工作原理和例子证明

    servlet简单介绍 当我们在地址栏里面输入www.baidu.com,终于呈如今我们面前的是百度搜索的页面.在这些訪问过程中,都会有一个webserver来处理这些请求以及訪问处理后的结果. 而s ...

  9. POI数据下载器

    偶尔用点儿POI数据,所以写了一个下载器.用到的东西还真不少. 功能点 +编写翻页脚本 +CSharp与JS交互 +POI数据转换json +CSharp的json序列化类 +CSharp读写json ...

  10. Android-1-电话拨号程序

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjY1MTM4OQ==/font/5a6L5L2T/fontsize/400/fill/I0JBQk ...