XML的JAVA 解析(一)(4) (轉)
共用標籤的
在我們開始探討更復雜的容器結構之前,我們還要搞掂SAX的另一個麻煩。雖然它不常見,在文件中出現在不同位置的資料也許會共用同一標籤名卻屬於不同的物件。假設你有一個customer節點, XML文件中有一個cunstomer representative(客戶代表)節點。這些節點都有FirstName和LastName標籤。有了這個含糊的地方,在
endElement
事件中
你就無法確定快取裡的內容到底該賦給哪個物件。你還要跟蹤某些
startElement SAX
事件中的
資訊好弄清該由哪個物件來收集
endElement SAX
事件中的資料。
microsoft-com::office" />
如果XML文件本來就沒有DTD或DTD已經改變而對映程式碼卻沒有變,就算對一個起初並不包含這種結構的XML文件來說,這個問題也會很危險。沒有了DTD,你的客戶(譯註:指你所編程式碼的使用者)合法地給你提供任何你將對映到的位置錯誤的標籤。
事實上,對這一問題唯一的辦法是不斷跟蹤所有開啟的起始標籤。作為一個簡單的例子,讓我們來看看下面這個XML文件:
Some Customer Name
The customer's company name
雖然標籤名Name並不唯一,但是到達標籤名的路徑是唯一的——要麼是CustomerInformation->Customer->Name
或者是 CustomerInformation->Customer->Company->Name。總是儲存完全路徑可以保證偶爾重用的標籤名不會讓你的程式碼不知所措。這也說明對映遞迴巢狀的XML結構時存在一個需要解決的問題;我們
將在下篇文章中討論這個問題。
接下來,我們看到兩個處理這一情形的例子。第一個例子是一個暴力的if 方案。 我要在所含元素的startElement SAX事件發生時設定某些標誌。然後在endElement
事件中, 我將執行以標誌為條件的if語句以判斷資料應該賦給哪個物件。
以下你將看到我們的說明重複標籤解析方法的XML樣本文件:
接下來是我們的所有幾何圖形類的基類:
package common;
// 基類擁有幾何圖形的共有屬性。
public class Shape {
public int x = 0;
public int y = 0;
public int height = 0;
public int width = 0;
}
簡單的三角形類:
package common;
import java.io.*;
//三角形
public class Triangle extends Shape {
// 三角形特有屬性...
public String name = "";
public void print( PrintStream out ){
out.println( "Triange: " + name +
" x: " + x +
" y: " + y +
" width: " + width +
" height: " + height );
}
}
接下來是簡單的長方形類:
package common;
import java.io.*;
// 長方形
public class Square extends Shape {
// 長方形待有屬性...
public String name = "";
public void print( PrintStream out ){
out.println( "Square: " + name +
" x: " + x +
" y: " + y +
" width: " + width +
" height: " + height );
}
}
圓形類:
package common;
import java.io.*;
// 圓
public class Circle extends Shape {
// 圓的特有屬性
public String name = "";
public void print( PrintStream out ){
out.println( "Circle: " + name +
" x: " + x +
" y: " + y +
" width: " + width +
" height: " + height );
}
}
(未完待續)
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-1003025/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- XML的JAVA 解析(一)(1) (轉)XMLJava
- XML的JAVA 解析(一)(3) (轉)XMLJava
- XML的JAVA 解析(一)(2) (轉)XMLJava
- XML的JAVA 解析(一)(5) (轉)XMLJava
- java的XML解析(DOM4J技術)JavaXML
- 【Java】解析xmlJavaXML
- Java解析XMLJavaXML
- Java DOM4J 方式解析XML檔案JavaXML
- DOM4J 解析 XML 之忽略轉義字元XML字元
- 用Java結合SAX 2.0 解析XML文件 (轉)JavaXML
- dom4j解析xmlXML
- JAVA解析XML的四種方法JavaXML
- JAVA進行XML解析JavaXML
- java使用sax解析xmlJavaXML
- Java解析XML彙總(DOM/SAX/JDOM/DOM4j/XPath)JavaXML
- XML入門指南(4)XML元素(轉)XML
- 使用 Java 解析XML檔案JavaXML
- Java中Dom解析xml文件JavaXML
- 【菜鳥學Java】9:使用dom4j解析jdbc.xmlJavaJDBCXML
- 使用dom4j 解析, 操作XMLXML
- Dom4j解析XML資料XML
- 使用Dom4j解析XML案例XML
- 詳解Java解析XML的四種方法JavaXML
- Java XML檔案解析書目錄JavaXML
- JAVA-使用SAX解析XML資料JavaXML
- Java XML程式設計例項解析JavaXML程式設計
- 使用PHP DOM-XML建立和解析XML檔案 (轉)PHPXML
- 使用Digester解析XML文件示例 (轉)XML
- 用dom4j,解析xml 最好、最方便!XML
- Java 將HTML轉為XMLJavaHTMLXML
- Xml解析XML
- XML簡明教程(4)什麼是XML物件模型(轉)XML物件模型
- XML輕鬆學習手冊(6)XML例項解析(轉)XML
- IOS 學習之XML解析(一)iOSXML
- XML輕鬆學習手冊(4)XML的術語之二(轉)XML
- 橫向對比分析Python解析XML的4種方式PythonXML
- java 實現的XML schema 驗證(轉)JavaXML
- python 的xml解析PythonXML