久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

一套JDOM操作XML文件的Base Class

 fenyu8 2011-07-01
一套JDOM操作XML文件的Base Class
 
一,、什么是JDOM?
JDOM是一個開源項目,,它基于樹型結(jié)構(gòu),,利用純Java的技術(shù)對XML文檔實現(xiàn)解析,、生成、序列化以及多種操作,。
利用JDOM處理XML文檔將是一件輕松,、簡單的事。JDOM 在2000年的春天被Brett McLaughlin和Jason Hunter開發(fā)出來,,以彌補DOM及SAX在實際應(yīng)用當(dāng)中的不足之處,。這些不足之處主要在于SAX沒有文檔修改、隨機訪問以及輸出的功能,而對于DOM來說,,JAVA程序員在使用時來用起來總覺得不太方便,。
在2002年的JavaOne會議上JDOM的主要創(chuàng)始人Jason Hunter有一篇精彩的演講介紹了JDOM技術(shù),題目就是JDOM Makes XML Easy,。
JDOM 直接為JAVA編程服務(wù),,它利用更為強有力的JAVA語言的諸多特性(方法重載、集合概念以及映射),,把SAX和DOM的功能有效地結(jié)合起來,。在使用設(shè)計上盡可能地隱藏原來使用XML過程中的復(fù)雜性。DOM的缺點主要是來自于由于Dom是一個接口定義語言(IDL),它的任務(wù)是在不同語言實現(xiàn)中的一個最低的通用標準,,并不是為JAVA特別設(shè)計的,。最近JDOM被收錄到JSR-102內(nèi),這標志著JDOM成為了JAVA平臺組成的一部分,。
二,、Base Class可以實現(xiàn)什么?
在我寫的這個Base Class中,,可以實現(xiàn)創(chuàng)建Document對象,,初始化Element對象,對Element對象進行有條件的修改,、查找操作,,對Document對象進行添加、刪除節(jié)點操作,,讀取,、保存XML文件的操作。這個Base Class是完全通過JDOM來實現(xiàn)操作XML文件,,并對XML文件中的特殊字符進行了過濾,,防止出現(xiàn)無效的XML文件。
三,、Base Class代碼
1. Base Class代碼
/*
* Copyright © 2008 Nervous Organization, All rights reserved.
*    
* LICENSE
*    
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License (GPL)
* as published by the Free Software Foundation; either version 2
* of the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.    See the
* GNU General Public License for more details.
*    
* To read the license please visit [url]http://www./copyleft/gpl.html[/url]
*    
*/

package org.agricultureonline.common.util;

import java.io.File;
import java.io.FileWriter;
import java.util.List;

import org.jdom.*;
import org.jdom.input.SAXBuilder;
import org.jdom.output.*;

/**
* @author Steven Wee  <a href="mailto:[email protected]">[email protected]</a>
* @version $Revision: 1.0 $ $Date: 2008/12/05 23:07:00 $
*/

public class BaseXMLOperator {

  /**
    * 生成一個新的Document對象
    * @return document
    */

  protected Document createDocument() {
    Document document = new Document();
    return document;
  }
    
  /**
    * 創(chuàng)建一個新的Element對象
    * @param paramName    Element對象名稱
    * @param paramValue  Element對象值
    * @return element
    */

  protected Element createElement( String paramName, String paramValue) {
    //  初始化Element
    Element element = new Element(paramName);
    //  設(shè)置Element的值,,格式化一遍字符串
    element.setText(formatTextForXML(paramValue));
    return element;
  }

  /**
    * 向XML文件中增加節(jié)點
    * @param document  載入XML文件后獲得的Document對象
    * @param fatherElementId  要增加節(jié)點的父節(jié)點Id
    * @param element  要增加的節(jié)點對象
    * @return true-增加節(jié)點成功  false-增加節(jié)點失敗
    */

  protected boolean addElement( Document document, String fatherElementId, Element element ) {
    if ( document == null || fatherElementId == null || element == null ) {
      return false;
    }
    //  得到根元素
    Element rootElement = document.getRootElement().getChild(fatherElementId);
    if ( rootElement == null ) {
      return false;
    }
    rootElement.addContent(element);
    return true;
  }
    
  /**
    * 修改節(jié)點的屬性值
    * @param element    要修改的節(jié)點對象
    * @param paramName    要修改的屬性名稱
    * @param paramValue  要修改的屬性值
    * @return  true-修改成功    false-修改失敗
    */

  protected boolean editElement( Element element, String paramName, String paramValue) {
    if ( element == null || paramName == null || paramValue == null ) {
      return false;
    }
    Element editElement = element.getChild(paramName);
    if ( editElement == null ) {
      return false;
    }
    editElement.setText(formatTextForXML(paramValue));
    
    return true;
  }

  /**
    * 修改節(jié)點的屬性值
    * @param document  載入XML文件后獲得的Document對象
    * @param fatherElementId  父節(jié)點Id
    * @param elementId    節(jié)點Id
    * @param Id  要刪除的節(jié)點標示
    * @param paramName    要修改的屬性名稱
    * @param paramValue  要修改的屬性值
    * @return  true-修改成功    false-修改失敗
    */

  protected boolean editElement( Document document, String fatherElementId, String elementId, String Id, String paramName, String paramValue) {
    return editElement(findElement(document, fatherElementId, elementId, Id), paramName, paramValue);
  }
    
  /**
    * 從XML文件中刪除節(jié)點
    * @param document  載入XML文件后獲得的Document對象
    * @param fatherElementId  要刪除節(jié)點的父節(jié)點Id
    * @param element  要刪除的節(jié)點對象
    * @return true-刪除節(jié)點成功  false-刪除節(jié)點失敗
    */

  protected boolean delElement( Document document, String fatherElementId, Element element ) {
    //  得到根元素
    Element rootElement = document.getRootElement().getChild(fatherElementId);
    //  刪除節(jié)點
    if ( rootElement.removeContent(element) ) {
      //  刪除成功
      return true;
    }
    //  刪除失敗
    return false;
  }

  /**
    * 從XML文件中刪除節(jié)點
    * @param document  載入XML文件后獲得的Document對象
    * @param fatherElementId  父節(jié)點Id
    * @param elementId    節(jié)點Id
    * @param Id  要刪除的節(jié)點標示
    * @return true-刪除節(jié)點成功  false-刪除節(jié)點失敗
    */

  protected boolean delElement( Document document, String fatherElementId, String elementId, String Id ) {
    return delElement( document, fatherElementId, findElement(document, fatherElementId, elementId, Id));
  }
    
  /**
    * 遍歷Document對象中的所有節(jié)點,查找符合用戶提供的節(jié)點對象
    * @param document  載入XML文件后獲得的Document對象
    * @param fatherElementId  父節(jié)點Id
    * @param elementId    節(jié)點Id
    * @param Id  要查找的節(jié)點標示
    * @return element
    */

  @SuppressWarnings("unchecked")
  protected Element findElement( Document document, String fatherElementId, String elementId, String Id ) {
    //  節(jié)點標示為空
    if ( Id == null ) {
      return null;
    }
    //  得到根元素
    Element fatherElement = document.getRootElement().getChild(fatherElementId);
    //  根元素不存在
    if ( fatherElement == null ) {
      return null;
    }
    //  獲得子元素列表
    List elementList = fatherElement.getChildren(elementId);
    //  遍歷列表
    for ( int i = 0 ; i < elementList.size() ; i++ ) {
      //  獲得子元素
      Element childElement = ( Element )elementList.get(i);
      //  比對節(jié)點標示
      if ( Id.equalsIgnoreCase(childElement.getAttributeValue("id")) ) {
        return childElement;
      }
    }
    return null;
  }

  /**
    * 獲取指定節(jié)點對象的值
    * @param document  載入XML文件后獲得的Document對象
    * @param fatherElementId  父節(jié)點Id
    * @param elementId    節(jié)點Id
    * @param Id  要查找的節(jié)點標示
    * @param paramName  要獲取的節(jié)點子對象名稱
    * @return element
    */

  protected String getElementValue( Document document, String fatherElementId, String elementId, String Id, String paramName ) {
    return getElementValue(findElement(document, fatherElementId, elementId, Id), paramName);
  }

  /**
    * 獲取指定節(jié)點對象的值
    * @param element  節(jié)點對象
    * @param paramName  要獲取的節(jié)點子對象名稱
    * @return element
    */

  protected String getElementValue( Element element, String paramName ) {
    if ( paramName == null || element.getChild(paramName) == null ) {
      return null;
    }
    return element.getChild(paramName).getText();
  }

  /**
    * 從用戶指定的路徑載入XML文件
    * @param filePath  XML文件路徑
    * @return document
    */

  protected Document loadFile( String filePath ) {
    Document document = null;
    try {
      SAXBuilder saxBuilder = new SAXBuilder();
      document = saxBuilder.build(new File(filePath));
    } catch ( Exception e ) {
      e.printStackTrace();
      return null;
    }
    return document;
  }
    
  /**
    * 保存XML文件到指定的路徑
    * @param filePath  指定的XML文件存放路徑
    * @param document  XML文件的Document對象
    * @param encode  XML文件編碼,為空代表使用默認的UTF-8編碼  可選編碼包括GB2312/GB18030或者其他
    * @return  true-保存成功    false-保存失敗
    */

  protected boolean saveFile( String filePath, Document document, String encode ) {
    Format format = Format.getCompactFormat();
    if ( encode != null ) {
      format.setEncoding(encode);        //設(shè)置xml文件的字符集
    }
    format.setIndent("  ");            //設(shè)置xml文件的縮進
    
    try {
      XMLOutputter xmlOut = new XMLOutputter(format);
      FileWriter fileWriter = new FileWriter(filePath);
      //  將XML文件寫入指定路徑
      xmlOut.output(document, fileWriter);
    } catch ( Exception e ) {
      return false;
    }
    return true;
  }
    
  /**
    * 過濾字符串,,防止XML文件中出現(xiàn)非法字符
    * @param sourceString  要過濾的字符串
    * @return  過濾后的字符串
    */
 
  protected String formatTextForXML( String sourceString ) {
    if ( sourceString == null ) {
      return null;
    }
    int strLen = 0;
    StringBuffer reString = new StringBuffer();
    String deString = "";
    strLen = sourceString.length();
    
    for ( int i = 0 ; i < strLen ; i++ ) {
      char ch = sourceString.charAt(i);
      switch ( ch ) {
      case '<':
        deString = "<";
        break;
      case '>':
        deString = ">";
        break;
      case '\"':
        deString = """;
        break;
      case '&':
        deString = "&";
        break;
      case 13:
        deString = "\n";
        break;
        default:
          deString = "" + ch;
      }
      reString.append(deString);
    }
    return reString.toString();
  }
}
2. Demo代碼
 
本段Demo代碼實現(xiàn)了生成一個符合RSS2.0規(guī)范的XML文件
 
接口定義:
package org.agricultureonline.common.xml;

import org.jdom.*;

public interface XMLOperator {
    
  public Document initDocument( String title, String linkURL, String description );
    
  public Document loadXMLFile( String filePath );
    
  public Element initElement( String paramName, String paramValue );
    
  public boolean addXMLElement( Document document, Element element );
    
  public boolean editXMLElement( Document document, String Id, String paramName, String paramValue);
    
  public boolean delXMLElement( Document document, String Id);
    
  public boolean saveDocument( String filePath, Document document );
}
 
實現(xiàn)類:
package org.agricultureonline.common.xml;

import org.agricultureonline.common.util.BaseXMLOperator;
import org.jdom.Document;
import org.jdom.Element;

public class RSSOperator extends BaseXMLOperator implements XMLOperator {

  protected String filePath;
    
  public RSSOperator() {
    
  }

  public RSSOperator( String filePath) {
    this.filePath = filePath;
  }
    
  public String getFilePath() {
    return filePath;
  }

  public void setFilePath(String filePath) {
    this.filePath = filePath;
  }
    
  public Element initElement( String paramName, String paramValue ) {
    return super.createElement(paramName, paramValue);
  }

  public boolean addXMLElement(Document document, Element element) {
    // TODO Auto-generated method stub
    return super.addElement(document, "channel", element);
  }

  public boolean delXMLElement(Document document, String Id) {
    // TODO Auto-generated method stub
    return super.delElement(document, "channel", "item", Id);
  }

  public boolean editXMLElement(Document document, String Id, String paramName, String paramValue) {
    // TODO Auto-generated method stub
    return super.editElement(document, "channel", "item", Id, paramName, paramValue);
  }

  public Document initDocument( String title, String linkURL, String description ) {
    // TODO Auto-generated method stub
    Document document = super.createDocument();
    
    Element rssElement = super.createElement("rss", null);
    rssElement.setAttribute("version", "2.0");

    Element channelEelement = new Element("channel");
    
    Element titleElement = new Element("title");
    titleElement.setText(title);

    Element linkElement = new Element("link");
    linkElement.setText(super.formatTextForXML(linkURL));

    Element descriptionElement = new Element("description");
    descriptionElement.setText(super.formatTextForXML(description));

    channelEelement.addContent(titleElement);
    channelEelement.addContent(linkElement);
    channelEelement.addContent(descriptionElement);
    
    rssElement.addContent(channelEelement);
    
    document.addContent(rssElement);
    
    return document;
  }

  public Document loadXMLFile(String filePath) {
    // TODO Auto-generated method stub
    return super.loadFile(filePath);
  }

  public boolean saveDocument(String filePath, Document document) {
    // TODO Auto-generated method stub
    return super.saveFile(filePath, document, "GB18030");
  }

}
 
3. 生成的XML文件內(nèi)容
<?xml version="1.0" encoding="GB18030"?>
<rss version="2.0">
  <channel>
    <title>測試XML</title>
    <link>Link</link>
    <description>Description</description>
    <item id="111">
      <title>網(wǎng)站RSS訂閱</title>
      <link>[url]http://www./[/url]</link>
      <description>農(nóng)業(yè)在線提供了一個中文植物Wiki平臺</description>
      <pubDate>Wed, 14 Jan 2004 17:16:44 GMT</pubDate>
    </item>
    <item id="222">
      <title>測試標題</title>
      <link>http://</link>
      <description>測試描述</description>
      <pubDate>Fri Dec 05 18:32:39 CST 2008</pubDate>
    </item>
    <item id="333">
      <title>測試標題</title>
      <link>http://</link>
      <description>測試描述</description>
      <pubDate>5 Dec 2008 10:33:06 GMT</pubDate>
    </item>
    <item id="444">
      <title>測試標題</title>
      <link>http://</link>
      <description>測試描述</description>
      <pubDate>5 Dec 2008 10:46:35 GMT</pubDate>
    </item>
  </channel>
</rss>

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內(nèi)容中的聯(lián)系方式,、誘導(dǎo)購買等信息,謹防詐騙,。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,,請點擊一鍵舉報,。
    轉(zhuǎn)藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多