xml 读、增、删、修

本文介绍了一个使用Java实现的XML文档读取和基本操作的示例,包括读取、读取特定元素、替换节点、删除节点及添加新节点。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

import   javax.xml.transform.dom.*;   

  import   javax.xml.parsers.*;   

  import   org.xml.sax.*;   

  import   org.xml.sax.helpers.*;   

  import   org.w3c.dom.*;   

  import   javax.xml.transform.*;   

  import   javax.xml.transform.stream.StreamResult     ;   

  import   javax.xml.transform.stream.StreamSource     ;   

  import   javax.xml.transform.dom.*;   

    

  import   java.util.*;   

  import   java.io.*;   

    

  public   class   DomReadDR{   

  DocumentBuilderFactory   factory;   

  DocumentBuilder   builder;   

  Document   doc;   

    

  public   DomReadDR()throws   Exception{   

  factory=DocumentBuilderFactory.newInstance();   

  builder   =   factory.newDocumentBuilder();   

  doc   =   builder.parse("test.xml");   

  }   

  public   void   Read()   throws   Exception{   

  doc.normalize();   

  NodeList   links=doc.getElementsByTagName("song");   

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

  Element   link   =   (Element)links.item(i);   

  System.out.println(link.getElementsByTagName("name").item(0).   

  getFirstChild().getNodeValue());   

  System.out.println(link.getElementsByTagName("music-by").item(0).   

  getFirstChild().getNodeValue());   

  }   

  }   

  //替换节点   

  public   int   replaceNode(String   nodeID,String   nodeValue){   

    

  doc.normalize();   

  NodeList   links=doc.getElementsByTagName("song");   

  //查找要替换的Node   

  boolean   blfindNode=false;   

  Element   link=null;   

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

  link   =   (Element)links.item(i);   

  if((link.getElementsByTagName("mId").item(0).getFirstChild().getNodeValue()).trim().equals(nodeID)){   

  blfindNode=true;   

  link.getElementsByTagName("music-by").item(0).getFirstChild().setNodeValue(nodeValue);//替换node的内容   

  break;   

  }   

  }   

  if   (!blfindNode)   

  {   

  return   1;//没有找到合适的节点   

  }   

  try{   

  TransformerFactory   tFactory=TransformerFactory.newInstance();   

  Transformer   transformer=tFactory.newTransformer();   

  //设置输出的encoding为改变gb2312   

  transformer.setOutputProperty("encoding","gb2312");     

  DOMSource   source=   new   DOMSource(doc);   

  StreamResult   result   =   new   StreamResult("test.xml");   

  transformer.transform(source,result);   

  }catch(javax.xml.transform.TransformerConfigurationException   e){   

  e.printStackTrace();   

  System.out.println(e.getMessage());   

  return   3;//写文件错误   

  }catch(javax.xml.transform.TransformerException   ex){   

  ex.printStackTrace();   

  return   3;   

  }   

  return   0;//替换成功   

  }   

  //删除节点   

  public   int   deleteNode(String   nodeID){   

    

  doc.normalize();   

  NodeList   links=doc.getElementsByTagName("song");   

  //查找要替换的Node   

  boolean   blfindNode=false;   

  Element   link=null;   

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

  link   =   (Element)links.item(i);   

  if((link.getElementsByTagName("mId").item(0).getFirstChild().getNodeValue()).trim().equals(nodeID)){   

  blfindNode=true;   

  try{   

  link.getParentNode().removeChild(link);   

  }catch(DOMException   e){   

  e.printStackTrace();   

  return   2;//Dom错误   

  }   

  break;   

  }   

  }   

    

  if   (!blfindNode)   

  {   

  return   1;//没有找到合适的节点   

  }   

  try{   

  TransformerFactory   tFactory=TransformerFactory.newInstance();   

  Transformer   transformer=tFactory.newTransformer();   

  //设置输出的encoding为改变gb2312   

    

  transformer.setOutputProperty("encoding","gb2312");     

  DOMSource   source=   new   DOMSource(doc);   

    

  StreamResult   result   =   new   StreamResult("test.xml");   

  transformer.transform(source,result);   

  }catch(javax.xml.transform.TransformerConfigurationException   e){   

  e.printStackTrace();   

  System.out.println(e.getMessage());   

  return   3;//写文件错误   

  }catch(javax.xml.transform.TransformerException   ex){   

  ex.printStackTrace();   

  return   3;   

  }   

  return   0;//替换成功   

  }   

    

  //添加节点   

  public   void   addNode(String   mId,String   name,String   musicby){   

  Text   textseg;   

  Element   link   =   doc.createElement("song");   

    

  Element   emId   =   doc.createElement("mId");   

  textseg=doc.createTextNode(mId);   

  emId.appendChild(textseg);   

  link.appendChild(emId);   

    

  Element   ename   =   doc.createElement("name");   

  textseg=doc.createTextNode(name);   

  ename.appendChild(textseg);   

  link.appendChild(ename);   

    

    

  Element   emusicby   =   doc.createElement("music-by");   

  textseg   =   doc.createTextNode(musicby);   

  emusicby.appendChild(textseg);   

  link.appendChild(emusicby);   

    

  Element   root   =   doc.getDocumentElement();   

  root.normalize();   

  root.appendChild(link);   

    

  System.out.println(doc.getDoctype());   

  try{   

    

  TransformerFactory   tFactory=TransformerFactory.newInstance();   

  Transformer   transformer=tFactory.newTransformer();   

  //设置输出的encoding为改变gb2312   

    

  transformer.setOutputProperty("encoding","gb2312");     

  DOMSource   source=   new   DOMSource(doc);   

  StreamResult   result   =   new   StreamResult("test.xml");   

  transformer.transform(source,result);   

  }catch(javax.xml.transform.TransformerConfigurationException   e){   

  e.printStackTrace();   

  System.out.println(e.getMessage());   

  }catch(javax.xml.transform.TransformerException   ex){   

  ex.printStackTrace();   

  }   

  }   

  public   static   void   main(String[]   args){   

  try{   

  DomReadDR   dr   =   new   DomReadDR();   

  dr.Read();   

  //dr.addNode("5","卡本特1","yestodayfdgdrtyrtyrtyrtyfgdfgdfgdfg   once   more");   

  System.out.println(dr.replaceNode("4","天上人间第死的克己复礼亏损大家法律亏损代理费"));   

  System.out.println(dr.deleteNode("1"));   

  }catch(Exception   e){   

  System.out.println(e.getMessage());   

  }   

  }   

    

  }   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值