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)
上一篇 2021年12月31日 下午5:00
下一篇 2021年12月31日 下午5:00


相关推荐

  • SQL中declare申明变量

    SQL中declare申明变量

    2021年11月16日
    50
  • 在服务器上排除问题的头五分钟

    在服务器上排除问题的头五分钟

    2021年9月8日
    59
  • pip安装本地指定版本的whl文件

    pip安装本地指定版本的whl文件用pip装一些包的时候,由于pip默认的源也就那几个,换了清华的没用,豆瓣的也没用。。。老停在下载途中就不走了。。,所以就想到了能不能先把这些包down下来,然后本地进行安装呢?说干就干,这里以Tensorflow为例:1.下载.whl文件百度输入:TensorFlowpypi查看到最近能用的最新.whl版本为1.5.0rc1:点开该链接:选择好适合自己系统的版本,然后下载!重点来了:一般来说直…

    2022年6月5日
    113
  • OpenClaw节点管理和多设备同步教程

    OpenClaw节点管理和多设备同步教程

    2026年3月13日
    3
  • deb 安装_Ubuntu下安装软件的几种方法

    deb 安装_Ubuntu下安装软件的几种方法1,使用UbuntuSoftware进行软件安装打开UbuntuSoftware应用程序,查找要安装的软件并进行安装,方法与使用软件管家在Windows下安装软件的过程一致。2,使用APT(软件包管理系统)进行软件安装apt是一款安装包管理工具,在Ubuntu下,我们可以使用apt命令进行软件包的安装、删除等操作。例如使用apt-get安装git软件,打开终端,输入sudoapt-…

    2022年5月31日
    39
  • 苹果绿设置zz

    苹果绿设置zz主要是在 linux 用了 google 的浏览器 不知道怎么设置 才找到了这篇文章 XP 系统设置方法 打开控制面板中的 显示 nbsp nbsp nbsp 选择外观 appearance 高级 advanced 然后在项目 items 那栏选窗口 windows 再点颜色 color 其它 others 然后把 Hue 色调 设为 85 Sat 饱和度 设为 90 Lum 亮度 设为 205 然后单击添加到自定义颜色 Addtocustomc 按 确定 一直确定 nbsp nbsp nbsp nbsp nbsp nbsp nbsp WIN7 系统设置方法 跟 XP

    2026年3月18日
    1

发表回复

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

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