您的位置:首页 > 编程语言 > Java开发

java实现xml文件增删改查

2016-02-24 16:49 429 查看
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节点

public class CreateXml {

private Document document;

private String filename;

DocumentBuilderFactory factory;

DocumentBuilder builder;

public CreateXml(String name){

filename=name;

factory=DocumentBuilderFactory.newInstance();

try {

builder = factory.newDocumentBuilder();

document=builder.newDocument();

} catch (ParserConfigurationException e) {

e.printStackTrace();

}

}

//写节点的方法

public void toWrite(SystemInfo sBean){

String sid=String.valueOf(sBean.getId());

Document doc=null;

try {

doc = builder.parse(new File(filename));

} catch (SAXException e) {

e.printStackTrace();

} catch (IOException e) {

e.printStackTrace();

}

//推断是否有该节点。假设有,则删除

NodeList links =doc.getElementsByTagName("System"+sid);

if(links.getLength()>0){ //节点已存在

for (int i=0;i<links.getLength();i++){

Node nd=links.item(i);

Node catParent = nd.getParentNode(); //得到nd父节点

catParent.removeChild(nd); //删除nd节点

}

}

//写节点

Element system=doc.createElement("System_"+sid);

Element erefreshCycle=doc.createElement("refreshCycle_"+sid);

Element esaveInterval=doc.createElement("saveInterval_"+sid);

Element edataReadCycle=doc.createElement("dataReadCycle_"+sid);

Element esaveData=doc.createElement("saveData_"+sid);

Element esoundAlarm=doc.createElement("soundAlarm_"+sid);

Text trefreshCycle=doc.createTextNode(sBean.getRefreshCycle());

Text tsaveInterval=doc.createTextNode(sBean.getSaveInterval());

Text tdataReadCycle=doc.createTextNode(sBean.getDataReadCycle());

Text tsaveData =doc.createTextNode(sBean.getSaveData());

Text tsoundAlarm=doc.createTextNode(sBean.getSoundAlarm());

Node nrefreshCycle =system.appendChild(erefreshCycle).appendChild(trefreshCycle);

Node nsaveInterva = system.appendChild(esaveInterval).appendChild(tsaveInterval);

Node ndataReadCycle = system.appendChild(edataReadCycle).appendChild(tdataReadCycle);

Node nsaveData = system.appendChild(esaveData).appendChild(tsaveData);

Node nsoundAlarm = system.appendChild(esoundAlarm).appendChild(tsoundAlarm);

Node nsystem = doc.getDocumentElement().appendChild(system);

TransformerFactory tff = TransformerFactory.newInstance();

Transformer tf=null;

try {

tf = tff.newTransformer();

tf.setOutputProperty(OutputKeys.ENCODING,"GB2312");

tf.setOutputProperty(OutputKeys.INDENT,"yes");

DOMSource source =new DOMSource(doc);

StreamResult rs = new StreamResult(new File(filename));

tf.transform(source,rs);

} catch (Exception e) {

e.printStackTrace();

}

}

}

//读xml节点值的方法

public String getPara(String path,String nodeName){

String node="";

try

{

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();

DocumentBuilder builder = factory.newDocumentBuilder();

Document document = builder.parse(new File(path));

Element rootElement = document.getDocumentElement();

NodeList list = rootElement.getElementsByTagName(nodeName);

if(list.getLength()>0){

Element element = (Element) list.item(0);

node=element.getChildNodes().item(0).getNodeValue();

}else{ //没有配置时。取默认的System_0的内容

nodeName=nodeName.substring(0,nodeName.indexOf("_"));

list = rootElement.getElementsByTagName(nodeName+"_0");

Element element = (Element) list.item(0);

node=element.getChildNodes().item(0).getNodeValue();

}

}

catch (Exception e)

{

System.out.println("exception:" + e.getMessage());

}

return node;

}

//调用CreateXML 的方法写xml节点值:

String path=request.getSession().getServletContext().getRealPath("/");

CreateXML xml = new CreateXml(path+"\\system.xml");

xml.toWrite(systemInfo); //systemInfo为一个javaBean

system.xml文件内容格式例如以下:

<?xml version="1.0" encoding="GB2312" standalone="no"?

>

<System>

<System_0>

<refreshCycle_0>60</refreshCycle_0>

<saveInterval_0>60</saveInterval_0>

<dataReadCycle_0>60</dataReadCycle_0>

<saveData_0>1</saveData_0>

<soundAlarm_0>1</soundAlarm_0>

</System_0>

<System_1>

<refreshCycle_1>36</refreshCycle_1>

<saveInterval_1>36</saveInterval_1>

<dataReadCycle_1>36</dataReadCycle_1>

<saveData_1>0</saveData_1>

<soundAlarm_1>1</soundAlarm_1>

</System_1>

</System>

dom4j xml文档 添加节点

添加节点

要操作的xml文档:student.xml

<?xml version="1.0" encoding="gb2312"?

>

<?xml-stylesheet type="text/xsl" href="student.xsl"?>

<students>

<student sn="01">

<name>张三</name>

<age>18</age>

</student>

<student sn="02">

<name>李四</name>

<age>20</age>

</student>

</students>

代码:

package mydom4j;

import java.io.File;

import java.io.FileOutputStream;

import java.io.IOException;

import org.dom4j.Document;

import org.dom4j.DocumentException;

import org.dom4j.Element;

import org.dom4j.io.OutputFormat;

import org.dom4j.io.SAXReader;

import org.dom4j.io.XMLWriter;

public class AddNodeTest {

/**

* @param args

*/

public static void main(String[] args) {

SAXReader saxReader=new SAXReader();

try {

Document doc=saxReader.read(new File("student.xml"));

Element root=doc.getRootElement();

//System.out.println(root.getName());

Element resource=root.addElement("student");

Element age=resource.addElement("age");

Element name=resource.addElement("name");

age.setText("05");

name.setText("王震");

OutputFormat opf=new OutputFormat("\t",true,"UTF-8");

opf.setTrimText(true);

XMLWriter writer=new XMLWriter(new FileOutputStream("out.xml"),opf);

writer.write(doc);

writer.close();

//System.out.println(root.getName());

} catch (DocumentException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: