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("\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的更多相关文章
- # java对xml文件的基本操作
下面是简单的总结三种常用的java对xml文件的操作 1. dom方式对xml进行操作,这种操作原理是将整个xml文档读入内存总,在内存中进行操作,当xml文档非常庞大的时候就会出现内存溢出的异常,这 ...
- 用java操作XML文件(DOM解析方式)
XML 可扩展标记语言(Extensible Markup Language),是独立于软件和硬件的传输工具. XML的作用: (1)用作配置文件 (2)简化数据共享 (3)简化数据传输 XML DO ...
- java对xml文件做增删改查------摘录
java对xml文件做增删改查 package com.wss; import java.io.File;import java.util.ArrayList;import java.util.Lis ...
- 更新java对xml文件的操作
//更新java在xml文件中操作的内容 public static void upda(Document doc) throws Exception{ //创建一个TransformerFactor ...
- Java操作xml文件
Bbsxml.java public class Bbsxml { private String imgsrc; private String title; private String url; p ...
- java 读取XML文件作为配置文件
首先,贴上自己的实例: XML文件:NewFile.xml(该文件与src目录同级) <?xml version="1.0" encoding="UTF-8&quo ...
- java读XML文件
XML文件设计为传输和存储数据,其焦点为数据内容. HTML设计为用来显示数据, 其焦点为数据外观. XML仅仅是文本文件,任何文本编辑器一般情况下都能对其进行编辑. XML没有预定义的标签,并且设定 ...
- java读取xml文件报“org.xml.sax.SAXParseException: Premature end of file” .
背景:java读取xml文件,xml文件内容只有“<?xml version="1.0" encoding="UTF-8"?>”一行 java读取该 ...
- java读取XML文件的四种方式
java读取XML文件的四种方式 Xml代码 <?xml version="1.0" encoding="GB2312"?> <RESULT& ...
随机推荐
- uva 10581 - Partitioning for fun and profit(记忆化搜索+数论)
题目链接:uva 10581 - Partitioning for fun and profit 题目大意:给定m,n,k,将m分解成n份,然后依照每份的个数排定字典序,而且划分时要求ai−1≤ai, ...
- POJ2421 & HDU1102 Constructing Roads(最小生成树)
嘎唔!~又一次POJ过了HDU错了...不禁让我想起前两天的的Is it a tree? orz..这次竟然错在HDU一定要是多组数据输入输出!(无力吐槽TT)..题目很简单,炒鸡水! 题意: 告 ...
- [Android学习笔记]获取view的尺寸和坐标
对于UI方面很多时候需要获取它的很多信息,具体情况见view的文档 View文档 http://developer.android.com/training/index.html 常用方法:获取vie ...
- 【css基础】垂直外边距的合并
近期在重温<CSS权威指南>,还是想把基础再打坚固点,如今对垂直外边距的合并问题进行简单总结. 1. 两个块级元素的外边距都大于0时,取那个最大值作为两个块级元素的垂直边距 请看以下一个小 ...
- iframe动态创建及释放内存
近期參与一个项目的开发,因为项目是基于浏览器的胖client(RIA)应用程序,页面中大量调用iframe.后期測试发现浏览器内存一直居高不下,并且打开iframe页面越多内存占用越大.在IE系列浏览 ...
- RGB转为Lab空间
虽然若干年前就看过了关于色彩空间的介绍,但是直到今天才自己动手写代码做这件事情.虽然网络上已经有很多现成的例子,但是一则仅仅适用于浮点型的数据,另一方面,在实现上也有一些尚可优化之处. 色彩模型除了最 ...
- git digest
.gitignore文件示例: .classpath .project .idea/ .settings/ target/ *~ *.iml *.log *.tmp https://zhuanlan. ...
- 使用mysql-mmm实现MySQL高可用集群
背景:之前实现的mysql同步复制功能(见笔者之前文章http://blog.csdn.net/kingofworld/article/details/39210937)仅仅是双机热备功能,还不能做到 ...
- hdu4105 Electric wave
Electric wave Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- [Oracle] - 性能优化工具(4) - AWRDD
AWRDD是用于比較两个AWR快照,从而获得不同一时候期的性能. 运行例如以下语句获得AWRDD: @?/rdbms/admin/awrddrpt.sql 2025 23 2月 2014 07:12 ...