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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- java的XML解析(DOM4J技術)JavaXML
- Java解析XMLJavaXML
- DOM4J 解析 XML 之忽略轉義字元XML字元
- 使用 Java 解析XML檔案JavaXML
- Java 將HTML轉為XMLJavaHTMLXML
- java 物件與xml相互轉換Java物件XML
- 快速將log4j.xml轉換為logback.xmlXML
- Xml解析XML
- Java學習--xml文字轉換成Java物件JavaXML物件
- java使用jaxb解析XML(含根據xml自動生成實體類)JavaXML
- go 解析xmlGoXML
- iOS – XML解析iOSXML
- 《手寫Mybatis》第4章:Mapper XML的解析和註冊使用MyBatisAPPXML
- XML解析-最快的方式SAXXML
- Java設計模式模式 (包括工廠模式xml解析)Java設計模式XML
- java EE開發之Servlet第五課:xml解析JavaServletXML
- Java 解析xml報文放入Map,並判斷所有xml標籤是否為空JavaXML
- PHP xml 轉陣列 陣列轉 xml 操作PHPXML陣列
- python之XML解析PythonXML
- 175.XML解析XML
- C# XML解析C#XML
- Java中將XML轉換為PDF的兩種辦法JavaXML
- Spring原始碼分析(一)Spring的初始化和XML解析Spring原始碼XML
- Python XML解析之DOMPythonXML
- python XML 檔案解析PythonXML
- jdom解析xml檔案XML
- XML 檔案解析實踐 (DOM 解析)XML
- Java Spring Beans.xml裡的Bean定義是如何被解析出來的JavaSpringBeanXML
- Android逆向(一) —— AndroidManifest.xml 二進位制解析AndroidXML
- 使用DocumentBuilderFactory解析XML淺談UIXML
- XML DOM 解析器概述XML
- 基於 DOM 的 XML 檔案解析類XML
- xml字串轉JSON字串XML字串JSON
- C# 操作xml(轉)C#XML
- Java解析xml檔案遇到特殊符號&會出現異常的解決方案JavaXML符號
- namespace對axis解析xml請求的影響namespaceXML
- Python解析XML檔案生成HTMLPythonXMLHTML
- 搞懂 XML 解析,徒手造 WEB 框架XMLWeb框架
- 【spring原始碼系列】之【xml解析】Spring原始碼XML