甜咖啡

          我的IT空間

          DOM生成和解析XML文檔

          1.DOM生成和解析XML文檔


          為 XML 文檔的已解析版本定義了一組接口。解析器讀入整個文檔,然后構建一個駐留內存的樹結構,然后代碼就可以使用 DOM
          接口來操作這個樹結構。優點:整個文檔樹在內存中,便于操作;支持刪除、修改、重新排列等多種功能;缺點:將整個文檔調入內存(包括無用的節點),浪費時間和空間;使用場合:一旦解析了文檔還需多次訪問這些數據;硬件資源充足(內存、CPU)。

          import java.io.FileInputStream;
          import java.io.FileNotFoundException;
          import java.io.FileOutputStream;
          import java.io.IOException;
          import java.io.InputStream;
          import java.io.PrintWriter;
          import javax.xml.parsers.DocumentBuilder;
          import javax.xml.parsers.DocumentBuilderFactory;
          import javax.xml.parsers.ParserConfigurationException;
          import javax.xml.transform.OutputKeys;
          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.Node;
          import org.w3c.dom.NodeList;
          import org.xml.sax.SAXException;
          /**
          *
          * @author hongliang.dinghl
          * DOM生成與解析XML文檔
          */
          public class DomDemo implements XmlDocument {
          private Document document;
          private String fileName;
          public void init() {
          try {
          DocumentBuilderFactory factory = DocumentBuilderFactory
          .newInstance();
          DocumentBuilder builder = factory.newDocumentBuilder();
          this.document = builder.newDocument();
          } catch (ParserConfigurationException e) {
          System.out.println(e.getMessage());
          }
          }
          public void createXml(String fileName) {
          Element root = this.document.createElement("employees");
          this.document.appendChild(root);
          Element employee = this.document.createElement("employee");
          Element name = this.document.createElement("name");
          name.appendChild(this.document.createTextNode("丁宏亮"));
          employee.appendChild(name);
          Element sex = this.document.createElement("sex");
          sex.appendChild(this.document.createTextNode("m"));
          employee.appendChild(sex);
          Element age = this.document.createElement("age");
          age.appendChild(this.document.createTextNode("30"));
          employee.appendChild(age);
          root.appendChild(employee);
          TransformerFactory tf = TransformerFactory.newInstance();
          try {
          Transformer transformer = tf.newTransformer();
          DOMSource source = new DOMSource(document);
          transformer.setOutputProperty(OutputKeys.ENCODING, "gb2312");
          transformer.setOutputProperty(OutputKeys.INDENT, "yes");
          PrintWriter pw = new PrintWriter(new FileOutputStream(fileName));
          StreamResult result = new StreamResult(pw);
          transformer.transform(source, result);
          System.out.println("生成XML文件成功!");
          } catch (TransformerConfigurationException e) {
          System.out.println(e.getMessage());
          } catch (IllegalArgumentException e) {
          System.out.println(e.getMessage());
          } catch (FileNotFoundException e) {
          System.out.println(e.getMessage());
          } catch (TransformerException e) {
          System.out.println(e.getMessage());
          }
          }
          public void parserXml(String fileName) {
          try {
          DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
          DocumentBuilder db = dbf.newDocumentBuilder();
          Document document = db.parse(fileName);
          NodeList employees = document.getChildNodes();
          for (int i = 0; i < employees.getLength(); i++) {
          Node employee = employees.item(i);
          NodeList employeeInfo = employee.getChildNodes();
          for (int j = 0; j < employeeInfo.getLength(); j++) {
          Node node = employeeInfo.item(j);
          NodeList employeeMeta = node.getChildNodes();
          for (int k = 0; k < employeeMeta.getLength(); k++) {
          System.out.println(employeeMeta.item(k).getNodeName()
          + ":" + employeeMeta.item(k).getTextContent());
          }
          }
          }
          System.out.println("解析完畢");
          } catch (FileNotFoundException e) {
          System.out.println(e.getMessage());
          } catch (ParserConfigurationException e) {
          System.out.println(e.getMessage());
          } catch (SAXException e) {
          System.out.println(e.getMessage());
          } catch (IOException e) {
          System.out.println(e.getMessage());
          }
          }
          }

          posted on 2011-07-19 16:12 甜咖啡 閱讀(300) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          導航

          <2011年7月>
          262728293012
          3456789
          10111213141516
          17181920212223
          24252627282930
          31123456

          統計

          常用鏈接

          留言簿(1)

          我參與的團隊

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 县级市| 东兰县| 广安市| 洪洞县| 涡阳县| 兴和县| 遵化市| 定陶县| 余庆县| 阳山县| 华阴市| 建平县| 兴山县| 秭归县| 桂林市| 云阳县| 重庆市| 遵义县| 桃江县| 商丘市| 海林市| 嘉荫县| 健康| 甘肃省| 德江县| 苏尼特左旗| 工布江达县| 改则县| 交城县| 郑州市| 乌恰县| 法库县| 普兰店市| 开阳县| 密云县| 邵武市| 阿坝| 东台市| 绵阳市| 罗定市| 谷城县|