java实现xml文件CRUD

java实现xml文件CRUD

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

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; 


   } 

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117779.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 004-protostuff踩坑-java bean新增字段反序列化失败问题

    004-protostuff踩坑-java bean新增字段反序列化失败问题protostuff避免更改java对象字段,比如新增一个,导致redis等缓存的数据反序列化失败问题??问题重现:我们有个方法通过attrKey查询List,同时方法中有缓存,会优先查询缓存,没有读库,然后写缓存返回。方法伪代码如下:publicvoidsetId(StringattrKey){//从缓存查询List<ConfAttr>attrValues=cacheClient.get(attrKey);

    2022年5月7日
    173
  • python中的int函数_python int()

    python中的int函数_python int()python中Int8Int16Int32Int64floatuint8Int8,占1个字节.Int16,占2个字节.Int32,占4个字节.Int64,占8个字节.float类型取值范围:-1到1或者0到1uint8类型取值范围:0到255(通常用于RGB图像中)#转换img.astype(‘uint8’)…

    2022年8月15日
    6
  • @ResponseBody注解作用与原理「建议收藏」

    @ResponseBody注解作用与原理「建议收藏」1、概念注解@ResponseBody,使用在控制层(controller)的方法上。2、作用作用:将方法的返回值,以特定的格式写入到response的body区域,进而将数据返回给客户端。当方法上面没有写ResponseBody,底层会将方法的返回值封装为ModelAndView对象。如果返回值是字符串,那么直…

    2022年5月8日
    87
  • 最小生成树的两种方法(Kruskal算法和Prim算法)[通俗易懂]

    关于图的几个概念定义:连通图:在无向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该无向图为连通图。 强连通图:在有向图中,若任意两个顶点vivi与vjvj都有路径相通,则称该有向图为强连通图。 连通网:在连通图中,若图的边具有一定的意义,每一条边都对应着一个数,称为权;权代表着连接连个顶点的代价,称这种连通图叫做连通网。 生成树:一个连通图的生成树是指一个连通子图,它含有图中…

    2022年4月6日
    47
  • TransactionScope事务处理

    TransactionScope事务处理在我们日常开发的时候,有时候程序需要使用到事务,就比如,我们日常最熟悉的一个流程,那么就是银行的取款,当用户从ATM机器选择取款1000元的时候,恰巧这个时候如果停电,如果没有事务那么将会出现不堪设想的后果,银行都会倒闭。最近在开发一个功能,需要根据单据的信息生成2张单据,要么全部保存,要么都保存失败,做到事务的一致性、原子性,一开始我想到的是SQL和存储过程级别的事务,但是好像按照当前的系统的业务逻辑,这个方法的底层还是拼接SQL语句,后面又想着使用C#的ADO.NET级别的事务,根据数据生成sql,但

    2022年7月19日
    17
  • 多种方法彻底解决pycharm中: OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题

    多种方法彻底解决pycharm中: OSError: [WinError 1455] 页面文件太小,无法完成操作 的问题目录1.重启pycharm(基本没啥用)2.把num_works设置为0(可能也没啥用)3.调大页面文件的大小(彻底解决问题)相信很多小伙伴在使用pycharm的时候都遇到这个问个报错问题吧,我是在跑PyTorch相关代码遇到的这个问题,也搜索了很多解决办法,这里介绍下我总结的经验.这是我搜索到的三种解决方法,依次来介绍下:1.重启pycharm(基本没啥用)这是最简单的方法了,可以先尝试一下,反正也很简单,不过如果你是第一次遇到这个问题,基本是解…

    2022年6月24日
    410

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号