<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    blogjava's web log

    blogjava's web log
    ...

    XML在Java中的應用

    目標

    了解解析器
    DOM的使用
    一個例子--java中操作xml|(添加。刪除 和顯示)

    解析器概述

    1.解析是讀取文檔并分解為元素的過程

    1.1 XML處理器(通常稱為解析器)
    ??? ---Web 應用程序的基本構建快
    ??? ----解析 XML 并為應用程序提供其所需的信息
    解析器的類型
    ?進行驗證的解析器
    ?? ----檢查 XML 文檔的有效性和格式規范
    1.2.2不進行驗證的解析器
    ------檢查 XML 文檔的格式規范

    可用的 XML 軟件包:
    ?---Sun 公司的 Java Project X 包
    ? ---IBM 公司的 XML4J v2 包
    ?---Oracle 公司的 v2 XML 包
    ?---James Clark 的 XP 解析器

    XML解析器包


    解析器?????????? 包名
    Java Project X?? javax.xml.parsers
    IBM XML4J?? com.ibm.xml.parsers.SAXParser
    ????????????????? com.ibm.xml.parsers.ValidatingSAXParser
    Oracle?????????? oracle.xml.parser.v2.SAXParser
    XP?????????? com.jclark.xml.sax.Driver


    XML 軟件包支持的 API:
    ---用于 XML 的簡單 API(SAX)
    ----文檔對象模型 (DOM)
    -----定義用于說明 DOM 重要區域的 API
    -----構建于 DOM 頂層的 API


    文檔對象模型
    ?? --- 定義一組 Java 接口
    ?? ----基于對象
    ?? ---與語言和平臺無關
    ?? ----將 XML 文檔表示為樹
    ?? --- 在內存中解析和存儲 XML 文檔
    ?? --- 允許隨機訪問文檔的不同部分

    如:
    department.xml
    <? xml?version="1.0" ?>
    < Department >
    ????
    < Student >
    ????????
    < Name > 吳軍 </ Name >
    ????????
    < E-mail > wujun1866@gmail.com </ E-mail >
    ????
    </ Student >
    ????
    < Student >
    ????????
    < Name > wujun </ Name >
    ????????
    < E-mail > wujun1866@gmail.com </ E-mail >
    ????
    </ Student >
    </ Department >

    使用?DOM?解析?XML?文檔
    ---- 獲得一個新?DocumentBuilderFactory?實例
    ---- 使用?DocumentBuilderFactory?構建?DocumentBuilder
    ---- 使用?DocumentBuilder的?parse(?)?方法解析文件
    ---- 將已解析的文檔存儲在?Document?對象中
    ---- 使用?getElementsByTagName(?)?方法獲得元素


    將XML文件轉化成DOM文檔


    // 獲得一個XML文件的解析器
    ?DocumentBuilderFactory?factory? = ?DocumentBuilderFactory.newInstance

    ();


    ?
    // 解析XML文件生成DOM文檔的接口類,以便訪問DOM。?
    DocumentBuilder?builder? = ????factory.newDocumentBuilder();
    document?
    = ?builder.parse(? new ?File(FileName)?);?

    遍歷DOM文檔?


    // 獲得Root元素?
    Element?element? = ?document.getDocumentElement();?
    // 獲得Root元素的子節點列表
    ?nodelist? = ?element.getChildNodes();
    ?
    // 用遞歸方法實現DOM文檔的遍歷
    ?GetElement(nodelist);?


    修改DOM文檔

    // ?獲得Root對象
    ?Element?root? = ?document.getDocumentElement();?
    // ?在DOM文檔中增加一個Element節點
    ?Element?booktype? = ?document.createElement( " COMPUTES " );
    ?
    // 將該節點轉化成root對象的子節點
    ?root.appendChild(cdrom);?
    // 在DOM文檔中增加一個Element節點?
    Element?booktitle? = ?document.createElement( " Title " );
    ?
    // 將該節點轉化成booktype對象的子節點
    ?booktype.appendChild(booktitle);?
    // 在DOM文檔中增加一個Text節點
    ?Text?bookname? = ?document.createTextNode( " understand?Corba " );?
    // 將該節點轉化成bookname對象的子節點?
    booktitle.appendChild(bookname);?


    將DOM文檔轉化成XML文件?

    // 獲得將DOM文檔轉化為XML文件的轉換器,在jdk1.4中,有類

    TransformerFactory??來實現

    ?TransformerFactory?tfactory?
    = ?TransformerFactory.newInstance();?
    Transformer?transformer?
    = ?tfactory.newTransformer();?

    // ?將DOM對象轉化為DOMSource類對象,該對象表現為轉化成別的表達形式的信

    息容器。
    ?DOMSource?source?
    = ? new ?DOMSource(document);?
    // ?獲得一個StreamResult類對象,該對象是DOM文檔轉化成的其他形式的文檔的

    容器,可以是XML文件,文本文件,HTML文件。
    這里為一個XML文件。
    ?StreamResult?result?
    = ? new ?StreamResult( new ?File(“text.xml”));?
    // ?調用API,將DOM文檔轉化成XML文件。?
    transformer.transform(source,result);?

    下面來看個例子 界面如下


    首先 單擊創建xml文件。將在C盤創建一個名為student.xml文件 代碼如下|:
    ?void?btnCreateXml_actionPerformed(ActionEvent?e)?{
    ????
    ????
    //創建xml文件
    ???org.w3c.dom.Document?dt=null;
    ???javax.xml.parsers.DocumentBuilderFactory?dbf
    =javax.xml.parsers.DocumentBuilderFactory.newInstance()?;
    ??
    try?{
    ????javax.xml.parsers.DocumentBuilder?db?
    =?dbf.newDocumentBuilder();
    ????dt
    =db.newDocument()?;
    ???
    //?dt.set
    ????org.w3c.dom.Element?ele1=dt.createElement("students");
    ???
    //?org.w3c.dom.Element?ele2=dt.createElement("student");
    ???
    //?ele1.appendChild(ele2);
    ????ele1.setAttribute("id"?,"101")?;
    ????dt.appendChild(ele1);

    ???javax.xml.transform.Transformer?tf
    =null;
    ???javax.xml.transform.dom.DOMSource?dm?
    =new?javax.xml.transform.dom.DOMSource(dt);
    ???java.io.File?file
    =new?java.io.File("c:/student.xml");

    ???javax.xml.transform.TransformerFactory?tff
    =javax.xml.transform.TransformerFactory?.newInstance()?;
    ??
    try?{
    ????tf?
    =?tff.newTransformer();
    ????
    try?{
    ??????tf.transform(dm,?
    new?javax.xml.transform.stream.StreamResult(file));
    ????}

    ????
    catch?(TransformerException?ex3)?{
    ????}

    ??}

    ??
    catch?(TransformerConfigurationException?ex1)?{
    ??}

    ??}

    ??
    catch?(ParserConfigurationException?ex)?{
    ????System.out.print(ex.getMessage()?);
    ??}

    ??}


    然后輸入相應的內容。。點擊添加到xml文件.數據將添加到xml文件了代碼如下:

    當點擊查看xml內容時。。jtable將顯示所有Student.xml中的內容。。代碼如下
    先定義個公共方法。。因為等下刪除的時候還要用到這方法..
    ShowxmlDate。。
    ?void?ShowxmlDate()
    ????
    {
    ??????org.w3c.dom.Document?dt
    =null;
    ??????javax.swing.table.DefaultTableModel?dtm
    =null;
    ??????java.util.Vector?vc
    =new?java.util.Vector?();
    ??????java.util.Vector?vcc
    =new?java.util.Vector?();
    ??????vcc.add(
    "姓名");
    ??????vcc.add(
    "年齡");
    ??????vcc.add(
    "地址");
    ??????vcc.add(
    "電話");
    ??javax.xml.parsers.DocumentBuilderFactory?dbf
    =javax.xml.parsers.DocumentBuilderFactory.newInstance()?;
    ?????java.io.File?file
    =new?java.io.File("c:/student.xml");
    ??
    ?????
    try?{
    ???????javax.xml.parsers.DocumentBuilder?db?
    =?dbf.newDocumentBuilder();
    ?????????
    try?{
    ???????????dt?
    =?db.parse(file);
    ????????org.w3c.dom.NodeList???nl
    =dt.getDocumentElement().getChildNodes()??;
    ??????????
    for(int?i=0;i<nl.getLength()?;i++)
    ??????????
    {
    ????????????org.w3c.dom.Element?ele
    =(org.w3c.dom.Element)nl.item(i);
    ????????????org.w3c.dom.NodeList???nodes
    =ele.getChildNodes()???;
    ?????????????
    //?for(int?ii=0;ii<nodes.getLength()?;ii++)
    ????????????
    //??{
    ?????????????
    //???org.w3c.dom.Element?ele1=(Element)nl.item(ii);
    ?????????????
    //?}
    ?????????????java.util.Vector?vc1=new?java.util.Vector?();
    ?????????????vc1.add(nodes.item(
    0).getFirstChild().getNodeValue())?;
    ?????????????vc1.add(nodes.item(
    1).getFirstChild().getNodeValue())?;
    ?????????????vc1.add(nodes.item(
    2).getFirstChild().getNodeValue())?;
    ?????????????vc1.add(nodes.item(
    3).getFirstChild().getNodeValue())?;
    ?????????????vc.add(vc1);
    ??????????dtm
    =new?javax.swing.table.DefaultTableModel?(vc,vcc);
    ??????????
    this.jTable1?.setModel(dtm);
    ??????????}

    ??
    ?????????}

    ?????????
    catch?(java.io.IOException?ex1)?{
    ???????????System.out.print(ex1.getMessage()?);
    ?????????}

    ?????????
    catch?(SAXException?ex2)?{
    ????????????System.out.print(ex2.getMessage()?);
    ?????????}

    ?????}

    ?????
    catch?(ParserConfigurationException?ex)?{
    ????????System.out.print(ex.getMessage()?);
    ?????}

    ??
    ??
    ??}

    再在顯示xml數據按鈕單擊事件掉用上面的方法就可以了。。
    ??void?btnShowxml_actionPerformed(ActionEvent?e)?{
    ????
    this.ShowxmlDate();
    ??}

    如圖..顯示剛剛添加的數據..


    當點刪除時,將把選中的數據從xml文件中刪除此條記錄..代碼如下
    public?void?btnDelete_actionPerformed(ActionEvent?actionEvent)?{
    ????org.w3c.dom.Document?dt
    =null;
    ??javax.xml.parsers.DocumentBuilderFactory?dbf
    =javax.xml.parsers.DocumentBuilderFactory.newInstance()?;
    ??java.io.File?file
    =new?java.io.File("c:/student.xml");
    ??
    try?{
    ???javax.xml.parsers.DocumentBuilder?db?
    =?dbf.newDocumentBuilder();
    ??????
    try?{
    ????????dt?
    =?db.parse(file);
    ????????org.w3c.dom.NodeList???nl
    =dt.getDocumentElement().getChildNodes()??;
    ????????System.out.print(nl.getLength()?);
    ??????
    for(int?i=0;i<nl.getLength()?;i++)
    ???
    //????dt.getElementsByTagNameNS("student","ff");
    ?????{
    ???????org.w3c.dom.Element?ele
    =(org.w3c.dom.Element)nl.item(i);
    ????
    if(ele.getChildNodes().item(0).getFirstChild().getNodeValue().equals(aa)??)
    ?????
    //??org.w3c.dom.NodeList??nodes=ele.getChildNodes()???;
    ?????{
    ???????dt.getDocumentElement().removeChild(nl.item(i))?;
    ?????}

    ?????
    else
    ?????
    {
    ?????System.out.print(
    "null");
    ?????}

    ?????}

    ?????javax.xml.transform.Transformer?tf
    =null;
    ???javax.xml.transform.dom.DOMSource?dm?
    =new?javax.xml.transform.dom.DOMSource(dt);
    ????javax.xml.transform.TransformerFactory?tff
    =javax.xml.transform.TransformerFactory?.newInstance();
    ????
    try?{
    ??????tf?
    =?tff.newTransformer();
    ??????
    try?{
    ????????tf.transform(dm,?
    new?javax.xml.transform.stream.StreamResult(file));
    ??????}

    ??????
    catch?(TransformerException?ex3)?{
    ??????}

    ?????
    this.ShowxmlDate();
    ????}

    ????
    catch?(TransformerConfigurationException?ex2)?{
    ????}

    ??????}

    ??????
    catch?(IOException?ex1)?{
    ??????}

    ??????
    catch?(SAXException?ex1)?{
    ??????}

    ??}

    ??
    catch?(ParserConfigurationException?ex)?{
    ??}


    ??}

    }


    提示
    要用導入的包
    import?java.awt.*;
    import?java.awt.event.*;
    import?javax.swing.*;
    javax.xml.parsers.ParserConfigurationException;
    import?javax.xml.transform.*;
    import?java.io.*;
    import?org.xml.sax.*;
    import?org.w3c.dom.*;
    import?java.awt.Font;
    import?java.awt.Dimension;
    import?java.awt.Rectangle;

    //在類里面還定義了一個全局變量。

    ?
    private?String?aa="";

    好了。到這就差不多了。。


    專家多指點。。

    posted on 2006-04-12 00:42 record java and net 閱讀(3565) 評論(2)  編輯  收藏 所屬分類: java

    評論

    # re: XML在Java中的應用 2006-04-12 08:33 kinda

    不錯。。

    就是沒有看懂。。

    太菜了,,沒有辦法。  回復  更多評論   

    # re: XML在Java中的應用 2006-04-17 12:00 Steve

    你的CODE STYLE不好,不用的COMMENT 就DELET, 留在那里又不說為什么. 而且你也沒有加VALIDATA OPETION,而且你也沒有SET NORMALIZE.  回復  更多評論   

    導航

    常用鏈接

    留言簿(44)

    新聞檔案

    2.動態語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 免费人成在线观看网站视频| 男女免费观看在线爽爽爽视频| 美女被免费视频网站a国产| 亚洲国产综合自在线另类| 99精品在线免费观看| 亚洲AV无码乱码国产麻豆穿越 | 久久久久久AV无码免费网站下载| 亚洲国产精品视频| 九一在线完整视频免费观看| 免费一级毛片正在播放| 美女18毛片免费视频| 亚洲成A人片77777国产| 一级毛片视频免费观看| 中文字幕亚洲激情| a级毛片免费全部播放| 久久亚洲精品中文字幕无码| 一区二区三区在线免费看| 亚洲国产成人久久精品app| 成人免费a级毛片| 亚洲第一街区偷拍街拍| 免费在线观看毛片| 久久国产精品免费一区二区三区| 亚洲中文久久精品无码ww16| 久久精品免费观看| 亚洲午夜精品一区二区公牛电影院| 久久99九九国产免费看小说| 亚洲欧美日韩自偷自拍| 亚洲第一黄片大全| 无码成A毛片免费| 亚洲AV综合色区无码二区爱AV| 大学生一级特黄的免费大片视频| 亚洲国产成人久久精品软件| 亚洲国产日韩在线观频| 午夜网站在线观看免费完整高清观看| 亚洲一区二区三区在线观看蜜桃 | 亚洲国产专区一区| 日本免费在线中文字幕| 337p欧洲亚洲大胆艺术| 国产免费av一区二区三区| 99在线热播精品免费99热| 亚洲AV无码国产精品色|