<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 應用程序的基本構(gòu)建快
    ??? ----解析 XML 并為應用程序提供其所需的信息
    解析器的類型
    ?進行驗證的解析器
    ?? ----檢查 XML 文檔的有效性和格式規(guī)范
    1.2.2不進行驗證的解析器
    ------檢查 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 文檔
    ?? --- 允許隨機訪問文檔的不同部分

    如:
    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?構(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é)點列表
    ?nodelist? = ?element.getChildNodes();
    ?
    // 用遞歸方法實現(xiàn)DOM文檔的遍歷
    ?GetElement(nodelist);?


    修改DOM文檔

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


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

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

    TransformerFactory??來實現(xiàn)

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

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

    息容器。
    ?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()?);
    ??}

    ??}


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

    當點擊查看xml內(nèi)容時。。jtable將顯示所有Student.xml中的內(nèi)容。。代碼如下
    先定義個公共方法。。因為等下刪除的時候還要用到這方法..
    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ù)..


    當點刪除時,將把選中的數(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)?{
    ??}


    ??}

    }


    提示
    要用導入的包
    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 閱讀(3572) 評論(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.動態(tài)語言

    3.工具箱

    9.文檔教程

    友情鏈接

    搜索

    最新評論

    主站蜘蛛池模板: 免费高清小黄站在线观看| 亚洲精品宾馆在线精品酒店| 国产99精品一区二区三区免费| 国产成人免费网站在线观看| 久久亚洲精品11p| 国产一级特黄高清免费大片| 亚洲日韩精品无码专区加勒比 | 亚洲天然素人无码专区| 欧美大尺寸SUV免费| 人人狠狠综合久久亚洲高清| 亚洲综合精品第一页| 香蕉视频在线观看免费国产婷婷| 亚洲伊人久久大香线蕉结合| 女人18毛片水真多免费播放| 日本亚洲欧美色视频在线播放 | 亚洲一区二区三区在线播放| 国产精品视频全国免费观看| 亚洲国产AV无码专区亚洲AV| 久久精品免费电影| 亚洲AV无码乱码麻豆精品国产| 亚洲人成色99999在线观看| 日韩精品无码人妻免费视频| 美女无遮挡免费视频网站 | 亚洲国产高清精品线久久| 九九全国免费视频| 男男AV纯肉无码免费播放无码| 亚洲国产精品99久久久久久 | 亚洲国产日韩一区高清在线| 亚洲AV色无码乱码在线观看| 亚洲精品WWW久久久久久| 最近的2019免费中文字幕| 免费中文字幕在线观看| 99免费精品视频| 亚洲中文字幕久在线| 亚洲AV中文无码乱人伦在线视色| 一个人免费视频在线观看www| 亚洲AV一二三区成人影片| 又大又硬又爽免费视频| 无码国产精品一区二区免费vr| 亚洲欧洲免费无码| 亚洲成AV人片在线观看ww|