2010年7月28日 星期三

DOM NodeList 動態更新之注意事項

若我們利用 NodeList  取得節點集合後,若新增或刪除該集合內的節點,則 NodeList 馬上會進行更新,這就是 NodeList 具有隨時保持自身更新的特性,我們用簡單的例子來說明這項特性:

2010年7月26日 星期一

在 Java 內使用 SQL 指令儲存 ' \ ' 字元的注意事項

由於 ' \ ' 在 Java 與 SQL 內均判定為跳脫字元,故若想利用 Java 連結 SQL 後,在資料庫內儲存跳脫字元 ' \ ',則除了在 Java 內使用 " \\ " 來表示 ' \ ' ,還要在輸入 SQL 指令時再使用 " \\ " ,故實際寫法為:

Java 物件陣列化

雖然這是很基本的問題,但當時卻卡了快半天才搞定,主因在於當該物件具有建構元時,要該如何讓該變數具有設定建構元且又有陣列化的方法,下列是簡單的陣列宣告:

int[] i = new int[2];   // 宣告 int 且陣列大小為2的變數 i
i[0]=1;    // i[0]初值為1
i[2]=2;    // i[1]初值為2

上面的程式碼應該對大家來說是小菜一疊,下列則是使用具有建構元的 class 產生物件並陣列化:

2010年7月22日 星期四

放棄 Neko HtmlParser ,改用 Cobra HtmlParser 解析網頁

之前發佈的文章 使用 Neko HtmlParser 產生 Html DOM ,發現到 Neko HtmlParser 經常發出:

Exception in thread "main" org.w3c.dom.DOMException:
HIERARCHY_REQUEST_ERR:
An attempt was made to insert a node where it is not permitted.

2010年7月19日 星期一

字串比較問題

假設我們從 DOM 中取出 的 href 屬性值時,照理說會透過比較 DOM 所回傳的屬性名稱是否與 href 相等,進而取出 href 屬性值。( i 和 j 為迴圈變數)

2010年7月18日 星期日

利用 Xpath( Xml Path Language XML查詢語言)來達到搜索功能

雖然我們學會了 Xml DOM 與 Html DOM ,但當 DOM 內容龐大時,要如何找出我們所需的節點內容呢?此時就能使用 Xpath( Xml Path Language XML查詢語言)來達到快速查詢的功能。

Xpath 本身就是一種 Xml 技術的查詢語言,在1999年11月16日成為 W3C 的建議規格,我們可利用 Xpath 查詢語言與運算式當作搜索條件,由於 Xpath 語言內容較為簡單,故在此就不再多作敘述,有興趣可查詢參考資料的內容。以下為 Java 使用 Xpath 的程式碼:

使用 Neko HtmlParser 產生 Html DOM

這次專題所選用的 HtmlParser 是採用有點歷史的 Neko HtmlParser + xerces ,其中 Neko 作者本身是 IBM 的 xerces 團隊的主力開發者,對 DOM 解析領域相當精深,再加上 Neko HtmlParser 具有不錯的 Html 標籤解析與清理效果。雖然我在最近一個禮拜尋找與測試其他的解析器,例如最多人使用的 HtmlParser 以及較為冷門的 Cobra HtmlParser ,但仔細比較之後,還是 Neko HtmlParser 較為好用。

2010年7月16日 星期五

Java 使用 import 載入套件時的注意事項

不同於 #include 將檔案內容載入進來,Java的 import 只是請編譯器幫我們在會使用到的 class 或 method 上加註套件名稱,例如我們要使用 Document 和 Node 的 class 則可以使用下列兩種寫法:

2010年7月7日 星期三

將 DOMSource 匯入 外部DTD

本次專題在 XML 的存取與修改上,是使用 TransformerFactory 的套件,而該套件的 Transformer 物件內含的 transform(Source source ,Result  result) 轉換函數,在 source 為 DOMSource 時,是無法順利寫入 外部DTD 。因為光是使用 DOMSource內的 setSystemId() 來進行設定,是無法真正將 外部DTD置入,故需要利用 Transformer 物件內的 setOutputProperty(String name,String value) 來強制 DOMSource變更設定。

產生具有 外部DTD 的 Document 文件

一般建立 Document 文件無非是使用文件檔案載入 documentbuilder.parse(File); ,或是產生空白的 Document 文件 documentbuilder.newDocument();  ,然而 org.w3c.dom 套件 提供我們產生具有 外部DTD 的 Document 文件,就是使用 DOMImplementation 介面,其方式如下:

2010年7月5日 星期一

XML 載入 DOM 時, DTD 的存放位置與顯示方式

當 XML 載入 DOM 時,我們將所有資料放置在 Document 物件內,若要查看 XML 內的 DTD(Document Type Definition)資料內容,必須先行宣告 DocumentType 物件,並使用 Document 內的函數將 DTD 載入至 DocumentType內,再利用 DocumentType 內的 getInternalSubset() Method 加以顯示,如下列程式範例:

2010年7月2日 星期五

Java 視窗佈局管理 - GirdBagLayout 格群佈局管理員

原本設定視窗時,必須要利用 setBounds(int x,int y,int weight,int height) 來慢慢調整,尤其單位是使用 pixels ,在操作上十分麻煩,故改用 GirdBagLayout 來管理元件間的佈置。雖然 GirdBagLayout 是所有視窗佈局管理員內操作最為複雜的,但操作熟練以後,發現元件間的佈置更為方便了。

事件處理的重複註冊問題


起初我將各個功能視窗的生成,分別製作成 method 以方便管理,並自然而然在各 method 內幫元件進行事件處理的觸發註冊,然而彼此視窗間,時常會有返回先前視窗的動作,此時很容易會產生事件處理重複註冊的 Bug。


為求理解上的方便,故我們直接設定按下按鈕時,會先釋放舊有的視窗並重新產生原本的新視窗,做出類似視窗間重複返回的動作,如下列程式: