甜咖啡

          我的IT空間

          DOM生成和解析XML文檔

          1.DOM生成和解析XML文檔


          為 XML 文檔的已解析版本定義了一組接口。解析器讀入整個文檔,然后構(gòu)建一個駐留內(nèi)存的樹結(jié)構(gòu),然后代碼就可以使用 DOM
          接口來操作這個樹結(jié)構(gòu)。優(yōu)點:整個文檔樹在內(nèi)存中,便于操作;支持刪除、修改、重新排列等多種功能;缺點:將整個文檔調(diào)入內(nèi)存(包括無用的節(jié)點),浪費時間和空間;使用場合:一旦解析了文檔還需多次訪問這些數(shù)據(jù);硬件資源充足(內(nèi)存、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)  編輯  收藏


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


          網(wǎng)站導(dǎo)航:
           

          導(dǎo)航

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

          統(tǒng)計

          常用鏈接

          留言簿(1)

          我參與的團(tuán)隊

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 宣武区| 清水河县| 南充市| 西丰县| 应用必备| 礼泉县| 响水县| 崇州市| 岚皋县| 新民市| 南木林县| 舟曲县| 嘉兴市| 襄樊市| 吴旗县| 新巴尔虎左旗| 四子王旗| 辽源市| 沽源县| 四平市| 固原市| 新乐市| 富蕴县| 谢通门县| 电白县| 德化县| 东乡| 石河子市| 布拖县| 普陀区| 三江| 溆浦县| 论坛| 海阳市| 璧山县| 三门县| 治多县| 兴和县| 安吉县| 红安县| 施秉县|