<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中的應(yīng)用

    目標(biāo)

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

    解析器概述

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

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

    可用的 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 重要區(qū)域的 API
    -----構(gòu)建于 DOM 頂層的 API


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

    如:
    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?實(shí)例
    ---- 使用?DocumentBuilderFactory?構(gòu)建?DocumentBuilder
    ---- 使用?DocumentBuilder的?parse(?)?方法解析文件
    ---- 將已解析的文檔存儲在?Document?對象中
    ---- 使用?getElementsByTagName(?)?方法獲得元素


    將XML文件轉(zhuǎn)化成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元素的子節(jié)點(diǎn)列表
    ?nodelist? = ?element.getChildNodes();
    ?
    // 用遞歸方法實(shí)現(xiàn)DOM文檔的遍歷
    ?GetElement(nodelist);?


    修改DOM文檔

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


    將DOM文檔轉(zhuǎn)化成XML文件?

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

    TransformerFactory??來實(shí)現(xiàn)

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

    // ?將DOM對象轉(zhuǎn)化為DOMSource類對象,該對象表現(xiàn)為轉(zhuǎn)化成別的表達(dá)形式的信

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

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

    下面來看個例子 界面如下


    首先 單擊創(chuàng)建xml文件。將在C盤創(chuàng)建一個名為student.xml文件 代碼如下|:
    ?void?btnCreateXml_actionPerformed(ActionEvent?e)?{
    ????
    ????
    //創(chuàng)建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()?);
    ??}

    ??}


    然后輸入相應(yīng)的內(nèi)容。。點(diǎn)擊添加到xml文件.數(shù)據(jù)將添加到xml文件了代碼如下:

    當(dāng)點(diǎn)擊查看xml內(nèi)容時。。jtable將顯示所有Student.xml中的內(nèi)容。。代碼如下
    先定義個公共方法。。因?yàn)榈认聞h除的時候還要用到這方法..
    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數(shù)據(jù)按鈕單擊事件掉用上面的方法就可以了。。
    ??void?btnShowxml_actionPerformed(ActionEvent?e)?{
    ????
    this.ShowxmlDate();
    ??}

    如圖..顯示剛剛添加的數(shù)據(jù)..


    當(dāng)點(diǎn)刪除時,將把選中的數(shù)據(jù)從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)?{
    ??}


    ??}

    }


    提示
    要用導(dǎo)入的包
    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="";

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


    專家多指點(diǎn)。。

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

    評論

    # re: XML在Java中的應(yīng)用 2006-04-12 08:33 kinda

    不錯。。

    就是沒有看懂。。

    太菜了,,沒有辦法。  回復(fù)  更多評論   

    # re: XML在Java中的應(yīng)用 2006-04-17 12:00 Steve

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

    導(dǎo)航

    常用鏈接

    留言簿(44)

    新聞檔案

    2.動態(tài)語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 最近国语视频在线观看免费播放| 国产偷国产偷亚洲高清人| 114一级毛片免费| 亚洲国产精品SSS在线观看AV | 亚洲精品自产拍在线观看| 免费看男女下面日出水来| 美女18一级毛片免费看| 亚洲av成人片在线观看| 亚洲ⅴ国产v天堂a无码二区| 麻豆成人精品国产免费| 成人免费一区二区三区| 亚洲精品又粗又大又爽A片| 久久精品国产精品亚洲艾草网美妙| 亚洲精品免费观看| 无遮挡免费一区二区三区| 91亚洲精品麻豆| 亚洲中文字幕第一页在线 | 日韩精品无码免费视频| 亚洲娇小性xxxx色| 久久亚洲国产精品一区二区| 亚洲av永久无码制服河南实里| 亚洲AV无码不卡在线观看下载| 免费v片在线观看视频网站| 欧美大尺寸SUV免费| 久久99热精品免费观看牛牛| 67194成手机免费观看| 免费无码av片在线观看| 特黄特色大片免费| 亚洲AV成人无码久久WWW| 一级毛片完整版免费播放一区| 亚洲精品无AMM毛片| 国产色在线|亚洲| 美女黄网站人色视频免费| 久久久WWW免费人成精品| 黄色a级片免费看| 中文字幕无码免费久久| 999久久久免费精品国产| 波多野结衣免费视频观看| 色妞WWW精品免费视频| 亚洲av无码成人精品区| 久久久久亚洲av无码尤物|