DIV CSS 佈局教程網

 DIV+CSS佈局教程網 >> 網頁腳本 >> XML學習教程 >> XML詳解 >> 利用JDOM把兩個XML合並生得到一個Document對象
利用JDOM把兩個XML合並生得到一個Document對象
編輯:XML詳解     

通常一些應用框架都會用 XML 作為配置,而且很多都支持多個 XML 文件,例如 Struts 框架可以配置多個 struts-config-xxx.xml 文件,Spring 也允許你用多個 applicationContext-xxx.xml 文件,再比如 DWR 也是可以由多個 dwr-xxx.xml 依功能或其他方式分開來配置。我們知道,這樣的多個 XML 有相同的規范定義,那麼程序如何一並解析它們呢?我看過 ActionServlet 是對 struts-config-xxx.xml 逐個解析的。我這裡介紹的一種方法是把那些有著相同規范定義的 XML 合成一個 Document 然後對這個 Document 對象進行處理,如 XPath 查找、進行 DOM 對象操作,就不需要每次到多個 Document 中去查找一遍。

  眾所周知,對 XML 的操作有兩種方式,DOM:XML 映射在內存中一顆樹;SAX:基於事件的方式。常用的 XML Java 解析組件有 DOM4J(apache的)、JDOM、和JAXP(Sun的),它們都提供了 DOM 和 SAX 實現和 Xpath 查找。

  下面我就介紹用 JDOM 完成對多個 XML 文件進行合並得到一個 Document 對象,實現代碼如下:

/*  
* Created on Sep 23, 2007  
*/  
package com.unmi;   
import Java.io.IOException;   
import Java.util.List;   
import org.jdom.Document;   
import org.jdom.Element;   
import org.jdom.JDOMException;   
import org.jdom.input.SAXBuilder;   
/**  
* Combine two or more XML together as one document  
* I put this Operation into main method.  
* @author Unmi  
*/  
public class CombineXML   
{   
  /**  
   * @param args  
   * @throws Exception  
   */  
  public static void main(String[] args) throws Exception   
  {   
    Document document = null;   
    try {   
      SAXBuilder dbf = new SAXBuilder();   
      document = (Document) dbf.build(args[0]);   
      Element docRoot = document.getRootElement();   
      for (int i = 1; i < args.length; i++) {   
        Document tmpdoc = dbf.build(args[i]);   
        List<Element> nlt = tmpdoc.getRootElement().getChildren();   
        for (int j = 0; j < nlt.size(); ) {   
          Element el = nlt.get(0);   
          // get free element   
          el.detach();   
          docRoot.addContent(el);   
        }   
      }   
    } catch (IOException e) {   
      throw new Exception("File not readable.");   
    } catch (JDOMException e) {   
      throw new Exception("File parsed error.");   
    }   
    //TODO, You can process that document now.   
  }   
} 
/* 
* Created on Sep 23, 2007 
*/ 
package com.unmi; 
import Java.io.IOException; 
import Java.util.List; 
import org.jdom.Document; 
import org.jdom.Element; 
import org.jdom.JDOMException; 
import org.jdom.input.SAXBuilder; 
/** 
* Combine two or more XML together as one document 
* I put this Operation into main method. 
* @author Unmi 
*/ 
public class CombineXML 
{ 
  /** 
   * @param args 
   * @throws Exception 
   */ 
  public static void main(String[] args) throws Exception 
  { 
    Document document = null; 
    try { 
      SAXBuilder dbf = new SAXBuilder(); 
      document = (Document) dbf.build(args[0]); 
      Element docRoot = document.getRootElement(); 
      for (int i = 1; i < args.length; i++) { 
        Document tmpdoc = dbf.build(args[i]); 
        List<Element> nlt = tmpdoc.getRootElement().getChildren(); 
        for (int j = 0; j < nlt.size(); ) { 
          Element el = nlt.get(0); 
          // get free element 
          el.detach(); 
          docRoot.addContent(el); 
        } 
      } 
    } catch (IOException e) { 
      throw new Exception("File not readable."); 
    } catch (JDOMException e) { 
      throw new Exception("File parsed error."); 
    } 
    //TODO, You can process that document now. 
  } 
}
研究這個的目的是,我想做一個工具合並多個 Struts-config 配置文件,然後輸入 nath、nction、norward、name 或 type 等中的一個屬性值查找到相關的其他屬性值,這樣能方便程序調試,比如看到哪個 aciton.do 就知道會轉向到哪些個頁面,附著了哪個 formbean,以及其他相關的屬性值是什麼。

XML學習教程| jQuery入門知識| AJAX入門| Dreamweaver教程| Fireworks入門知識| SEO技巧| SEO優化集錦|
Copyright © DIV+CSS佈局教程網 All Rights Reserved