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

  1、java代码:

  主要采用dom来进行操作

  

复制代码 代码如下:

  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的初始化语句中的时候,读没问题,但是当写或者删的时候也会报错;

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