|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
java.lang.Object org.xml.sax.helpers.NamespaceSupport
public class NamespaceSupport
封裝名稱空間邏輯,以便由使用 SAX 的應用程序使用,或由 SAX 驅動程序內部使用。
此模組(包括源程式碼和文檔)位於公共域中,對該模組不提供擔保。有關更多資訊,請參閱http://www.saxproject.org。
此類別封裝名稱空間處理的邏輯:它可以追蹤當前對每個上下文強制使用的宣告,並自動將限定的 XML 名稱處理為其名稱空間的一部分;它還可以反過來用於從名稱空間產生 XML qname。
名稱空間支持物件是可重用的,但是在每個Session之間必須調用 reset 方法。
下面是一個簡單的Session:
String parts[] = new String[3]; NamespaceSupport support = new NamespaceSupport(); support.pushContext(); support.declarePrefix("", "http://www.w3.org/1999/xhtml"); support.declarePrefix("dc", "http://www.purl.org/dc#"); parts = support.processName("p", parts, false); System.out.println("Namespace URI: " + parts[0]); System.out.println("Local name: " + parts[1]); System.out.println("Raw name: " + parts[2]); parts = support.processName("dc:title", parts, false); System.out.println("Namespace URI: " + parts[0]); System.out.println("Local name: " + parts[1]); System.out.println("Raw name: " + parts[2]); support.popContext();
注意,對於多數元素不包含名稱空間宣告的使用情況,必須優化此類別:例如,如果對每個上下文都重複相同的前綴/URI 映射,則此類別將會產生某種程度的低效率。
雖然 SAX 驅動程序(解析器)可以選擇使用此類別來實作名稱空間處理,但是不要求它們這樣做。如果應用程序要使用名稱空間資訊,則它們必須追蹤名稱空間資訊本身。
欄位摘要 | |
---|---|
static String |
NSDECL
作為常數的名稱空間宣告 URI。 |
static String |
XMLNS
作為常數的 XML 名稱空間 URI。 |
建構子摘要 | |
---|---|
NamespaceSupport()
創建新的名稱空間支持物件。 |
方法摘要 | |
---|---|
boolean |
declarePrefix(String prefix,
String uri)
宣告名稱空間前綴。 |
Enumeration |
getDeclaredPrefixes()
返回此上下文中宣告的所有前綴的列舉。 |
String |
getPrefix(String uri)
返回映射到名稱空間 URI 的前綴之一。 |
Enumeration |
getPrefixes()
返回所有前綴的列舉,其宣告在當前上下文中是活動的。 |
Enumeration |
getPrefixes(String uri)
返回給定 URI 的 所有前綴的列舉,給定 URI 的宣告在當前上下文中是活動的。 |
String |
getURI(String prefix)
尋找前綴,並獲取當前映射的名稱空間 URI。 |
boolean |
isNamespaceDeclUris()
如果將名稱空間宣告屬性放置到名稱空間中,則返回 true。 |
void |
popContext()
恢復到以前的名稱空間上下文。 |
String[] |
processName(String qName,
String[] parts,
boolean isAttribute)
declarePrefix() 處理完當前上下文中的所有宣告之後,處理原始 XML 限定名稱。 |
void |
pushContext()
開始新的名稱空間上下文。 |
void |
reset()
重設此名稱空間支持物件,以便重新使用。 |
void |
setNamespaceDeclUris(boolean value)
控制是否通過 processName() 將名稱空間宣告屬性放置到 NSDECL 名稱空間中。 |
從類別 java.lang.Object 繼承的方法 |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
欄位詳細資訊 |
---|
public static final String XMLNS
http://www.w3.org/XML/1998/namespace
,在 "Namespaces in XML" * 推薦標準中定義。
這是自動映射到 "xml" 前綴的名稱空間 URI。
public static final String NSDECL
http://www.w3.org/xmlns/2000/
,在 "Namespaces in XML" 推薦標準的向後相容勘誤表中定義。因為勘誤表晚於 SAX2,SAX2 預設為原始的推薦標準,並且通常不使用此 URI。
這是可以選擇應用到 xmlns 和 xmlns:* 屬性的名稱空間 URI,使用它宣告名稱空間。
setNamespaceDeclUris(boolean)
,
isNamespaceDeclUris()
,
常數欄位值建構子詳細資訊 |
---|
public NamespaceSupport()
方法詳細資訊 |
---|
public void reset()
在為新的Session重用名稱空間支持物件之前,有必要調用此方法。如果要支持名稱空間宣告 URI,則還必須將標誌設置為非預設值。
setNamespaceDeclUris(boolean)
public void pushContext()
事件回調程式碼應對每個元素啟動一次新的上下文。這意味著已準備好在兩個位置中的任何一個位置調用它。對於不包括名稱空間宣告的元素,ContentHandler.startElement() 回調是正確的位置。對於具有此類別宣告的元素,它在第一個 ContentHandler.startPrefixMapping() 回調中完成。可以使用布林標誌追蹤是否已啟動上下文。當調用這些方法中的任何一個方法時,它會檢查該標誌以查看是否需要啟動新的上下文。如果是,它會啟動上下文,並設置標誌。在 ContentHandler.startElement() 設置標誌後,它總是清除該標誌。
通常,SAX 驅動程序會在每個 XML 元素的開始處推送新的上下文。然後,它們執行屬性上的第一個傳遞,以處理所有的名稱空間宣告,進行 ContentHandler.startPrefixMapping() 回調。然後,進行第二個傳遞,以便為所有屬性和元素名稱確定限定名稱空間的名稱。最後,ContentHandler.startElement() 回調的所有資訊都是可用的,這樣就可以完成。
名稱空間支持物件總是以已經有效的基本上下文開始:在此上下文中,僅宣告 "xml" 前綴。
ContentHandler
,
popContext()
public void popContext()
通常,應在每個 XML 元素的結束處彈出上下文。彈出上下文後,恢復以前有效的所有名稱空間前綴映射。
彈出上下文後,不得嘗試宣告其他名稱空間前綴,除非首先推送另一個上下文。
pushContext()
public boolean declarePrefix(String prefix, String uri)
processName()
根據(潛在預定義的)前綴解釋前綴。
此方法在當前名稱空間上下文中宣告前綴;在彈出此上下文之前,前綴仍保持有效,除非它在後代上下文中映像。
要宣告預設元素名稱空間,請使用空字元串作為前綴。
注意,在此資源庫中存在不對稱:即使宣告了預設元素名稱空間,getPrefix
也不會返回 "" 前綴。要檢查預設名稱空間,必須使用 getURI
顯式尋找它。存在此不對稱使尋找屬性名稱的前綴更容易,其中不允許預設的前綴。
prefix
- 要宣告的前綴,或指示預設元素名稱空間的空字元串。這不能有值“xml”或“xmlns”。uri
- 與前綴關聯的名稱空間 URI。
processName(java.lang.String, java.lang.String[], boolean)
,
getURI(java.lang.String)
,
getPrefix(java.lang.String)
public String[] processName(String qName, String[] parts, boolean isAttribute)
declarePrefix()
處理完當前上下文中的所有宣告之後,處理原始 XML 限定名稱。
此方法通過移除前綴,並在當前宣告的前綴之中尋找它來處理當前上下文中的原始 XML 限定名稱。返回值將是調用者提供的陣列,按以下方式填寫:
將內部化陣列中的所有字元串。如果原始名稱具有沒有宣告的前綴,那麼返回值將為 null。
注意,處理屬性名稱與處理元素名稱不同:未加前綴的元素名稱將接收預設名稱空間(如果有),而未加前綴的屬性名稱將不接收。
qName
- 要處理的 XML 限定名稱。parts
- 調用者提供的陣列,至少能夠保存三個成員。isAttribute
- 指示這是屬性名稱 (true) 或元素名稱 (false) 的標誌。
declarePrefix(java.lang.String, java.lang.String)
,
String.intern()
public String getURI(String prefix)
此方法尋找當前上下文中的前綴。對於預設名稱空間,使用空字元串 ("")。
prefix
- 要尋找的前綴。
getPrefix(java.lang.String)
,
getPrefixes()
public Enumeration getPrefixes()
註:如果存在預設前綴,則在此列舉中將不返回它;使用帶有參數 "" 的 getURI
檢查預設前綴。
getDeclaredPrefixes()
,
getURI(java.lang.String)
public String getPrefix(String uri)
如果當前有多個前綴映射到同一 URI,則此方法將進行任意選擇;如果需要所有前綴,則改用 getPrefixes()
方法。
註:這將永不返回空(預設)前綴;要檢查預設前綴,請使用帶有參數 "" 的 getURI
方法。
uri
- 名稱空間 URI
getPrefixes(java.lang.String)
,
getURI(java.lang.String)
public Enumeration getPrefixes(String uri)
此方法返回映射到特定名稱空間 URI 的前綴。將包括前綴:xml。如果僅需要映射到名稱空間 URI 的一個前綴,並且不關心獲取哪一個前綴,請改用 getPrefix
方法。
註:此列舉中永不 套件括空的(預設)前綴;要檢查是否存在預設名稱空間,請使用帶有參數 "" 的 getURI
方法。
uri
- 名稱空間 URI。
getPrefix(java.lang.String)
,
getDeclaredPrefixes()
,
getURI(java.lang.String)
public Enumeration getDeclaredPrefixes()
此列舉中將包括空的(預設)前綴;注意,此行為與 getPrefix(java.lang.String)
和 getPrefixes()
的行為不同。
getPrefixes()
,
getURI(java.lang.String)
public void setNamespaceDeclUris(boolean value)
processName()
將名稱空間宣告屬性放置到 NSDECL
名稱空間中。在推送任何上下文之前,這是唯一可更改的。
IllegalStateException
- 當推送任何上下文之後嘗試設置它時。public boolean isNamespaceDeclUris()
|
JavaTM 2 Platform Standard Ed. 6 |
|||||||||
上一個類別 下一個類別 | 框架 無框架 | |||||||||
摘要: 巢狀 | 欄位 | 建構子 | 方法 | 詳細資訊: 欄位 | 建構子 | 方法 |
版權所有 2008 Sun Microsystems, Inc. 保留所有權利。請遵守GNU General Public License, version 2 only。