现在的位置: 首页 > 综合 > 正文

java对XML文件的解析、节点的增加、删除操作总结

2013年04月23日 ⁄ 综合 ⁄ 共 4910字 ⁄ 字号 评论关闭

先贴代码吧

感谢:http://xranming.blog.163.com/blog/static/24204952009914104148872/

 http://www.diybl.com/course/3_program/java/javajs/20090303/157541.html

 

1、java代码:

主要采用dom来进行操作

java对xml操作有四种方法:http://passmatlab.bokee.com/3455905.html

 package test;

import java.io.IOException;

import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
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.NodeList;
import org.w3c.dom.Text;
import org.xml.sax.SAXException;

 

public class XmlOprate {

 

 Document doc;
 DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
 DocumentBuilder builder;
 NodeList imags;
 String path;
 
 public NodeList getImags() {
  return imags;
 }

 public void setImags(NodeList imags) {
  this.imags = imags;
 }
 
 /**
  * 构造方法
  * @param path:xml文件的路径
  * @param nodes:要解析的xml节点名称
  */
 public XmlOprate(String path) {
  super();
  this.path = path;
  System.out.println(System.getProperty("user.dir"));
 }

 /**
  * 解析XML
  * @param path
  */
 public  void readXml(){

  try {
   builder = factory.newDocumentBuilder();
   Document doc=builder.parse(path);
   doc.normalize();
   
   NodeList imags =doc.getElementsByTagName("imags");

   this.setImags(imags);
   for (int i=0;i<imags.getLength();i++){
    Element link=(Element) imags.item(i);
    System.out.print("title: ");
    System.out.println(link.getElementsByTagName("title").item(0).getFirstChild().getNodeValue());
    System.out.print("URL: ");
    System.out.println(link.getElementsByTagName("url").item(0).getFirstChild().getNodeValue());
    System.out.print("imgsrc: ");
    System.out.println(link.getElementsByTagName("imgsrc").item(0).getFirstChild().getNodeValue());
    System.out.println();
   }
  }catch (ParserConfigurationException e) {  
   e.printStackTrace();
  } catch (SAXException e) {
   e.printStackTrace();
  } catch (IOException e) {   
   e.printStackTrace();
  }
  
 }
 
 /**
  * addCode
  * @param path
  */
 public  void addXmlCode(String imgsrc,String title,String url){
  

  try {
   builder = factory.newDocumentBuilder();
   Document doc=builder.parse(path);
   doc.normalize();
   
   Text textseg;
   Element imag=doc.createElement("imags");
   
   Element linkimgsrc=doc.createElement("imgsrc");
   textseg=doc.createTextNode(imgsrc);
   linkimgsrc.appendChild(textseg);
   imag.appendChild(linkimgsrc);
   
   Element linktitle=doc.createElement("title");
   textseg=doc.createTextNode(title);
   linktitle.appendChild(textseg);
   imag.appendChild(linktitle);
   
   Element linkurl=doc.createElement("url");
   textseg=doc.createTextNode(url);
   linkurl.appendChild(textseg);
   imag.appendChild(linkurl);
   
   doc.getDocumentElement().appendChild(imag);
   
   TransformerFactory tFactory =TransformerFactory.newInstance();
   Transformer transformer;
   
   transformer = tFactory.newTransformer();
   DOMSource source = new DOMSource(doc);
   StreamResult result = new StreamResult(new java.io.File(path));
   transformer.transform(source, result);
  }catch(Exception e){
   
  }   
 }
 
 /**
  * delete xml code
  * @param path
  */
 public void delXmlCode(){
  
  try {
   builder = factory.newDocumentBuilder();
   doc=builder.parse(path);
   doc.normalize();  
   NodeList imags =doc.getElementsByTagName("imags");
   
    Element elink=(Element) imags.item(0);
       elink.removeChild(elink.getElementsByTagName("imgsrc").item(0));

    elink.removeChild(elink.getElementsByTagName("title").item(0));
    elink.removeChild(elink.getElementsByTagName("url").item(0)); 
 
    doc.getFirstChild().removeChild(elink);
   
   TransformerFactory tFactory =TransformerFactory.newInstance();
   Transformer transformer = tFactory.newTransformer();
   DOMSource source = new DOMSource(doc);
   StreamResult result = new StreamResult(new java.io.File(path));
   transformer.transform(source, result);

  } catch (ParserConfigurationException e) {  
   e.printStackTrace();
  } catch (SAXException e) {
   e.printStackTrace();
  } catch (IOException e) {   
   e.printStackTrace();
  } catch (TransformerConfigurationException e) {
   e.printStackTrace();
  } catch (TransformerException e) {
   e.printStackTrace();
  }
 }

}

 

2、xml部分

<?xml version="1.0" encoding="UTF-8" ?>
<root>
    <imags>
        <imgsrc>images/ad-01.jpg</imgsrc>
        <title>胡志明市</title>
        <url>http://torchrelay.beijing2008.cn/cn/journey/hochiminhcity/</url>
    </imags>
    <imags>
        <imgsrc>images/ad-02.jpg</imgsrc>
        <title>香港2</title>
        <url>http://torchrelay.beijing2008.cn/cn/journey/hongkong/</url>
    </imags>
</root>

 

3、总结

看对xml操作的三个方法(读、写、删),他们的初始化语句都相同:

builder = factory.newDocumentBuilder();
   Document doc=builder.parse(path);
   doc.normalize();

开始我打算把这部分相同的部分拿出来写在构造方法中,但是在测试中发现,这样总是会报空指针的错误(搞了我好久);

而只是把

builder = factory.newDocumentBuilder();

放到builder的初始化语句中的时候,读没问题,但是当写或者删的时候也会报错;

 

所以就写成现在这样了,感觉有点乱乱的,但也没想到什么好的方法,就先贴到这里了,以后可能会用得着

抱歉!评论已关闭.