public class NamespaceSupport extends Object
This module, both source code and documentation, is in the Public Domain, and comes with NO WARRANTY. See http://www.saxproject.org for further information.
这个类封装了命名空间的处理逻辑:它跟踪声明目前在力为每个上下文并自动处理合格的XML名称为命名空间部分;还可用于反向命名空间生成XML限定名。
命名空间支持对象是可重复使用的,但必须在每个会话之间调用复位方法。
这里是一个简单的会话:
字符串部分[ ]新的字符串[ 3 ];namespacesupport支持=新namespacesupport();pushcontext()支持;支持。declareprefix(”、“HTTP:/ /两。org / 1999 / XHTML”);支持。declareprefix(“直流”、“HTTP:/ / www.purl。org /直流#”);部分=支持。ProcessName(“P”,,假);系统的输入(“命名空间URI:”+部分[ 0 ]);系统。出来。println(当地名称:”+部分[ 1 ]);系统的输入(“原名称:”+部分[ 2 ]);部分=支持。ProcessName(直流:标题”,,假);系统的输入(“命名空间URI:”+部分[ 0 ]);系统。出来。println(当地名称:”+部分[ 1 ]);系统的输入(“原名称:”+部分[ 2 ]);popcontext()支持;
注:这个类的使用的情况下,大多数元素不包含命名空间声明优化:如果同一前缀/ URI映射为每个上下文重复(例如),这个类将不那么有效率。
虽然司机(SAX解析器)可以选择使用这个类来实现命名空间的处理,他们也不需要这么做。应用程序必须跟踪命名空间信息,如果他们想使用命名空间信息。
Modifier and Type | Field and Description |
---|---|
static String |
NSDECL
命名空间声明URI作为常数。
|
static String |
XMLNS
XML命名空间URI为常数。
|
Constructor and Description |
---|
NamespaceSupport()
创建一个新的命名空间支持对象。
|
Modifier and Type | Method and Description |
---|---|
boolean |
declarePrefix(String prefix, String uri)
声明一个命名空间前缀。
|
Enumeration |
getDeclaredPrefixes()
在这样的背景下宣布返回所有前缀枚举。
|
String |
getPrefix(String uri)
返回一个前缀映射到命名空间URI。
|
Enumeration |
getPrefixes()
返回所有前缀的声明在当前活跃的枚举。
|
Enumeration |
getPrefixes(String uri)
返回给定URI的声明在当前活动的所有前缀枚举。
|
String |
getURI(String prefix)
查一个前缀和命名空间URI映射到目前。
|
boolean |
isNamespaceDeclUris()
如果将命名空间声明属性放在命名空间中,则返回真。
|
void |
popContext()
返回到前面的命名空间上下文。
|
String[] |
processName(String qName, String[] parts, boolean isAttribute)
过程的原始XML限定名,在当前上下文中的所有声明已由
declarePrefix() 。
|
void |
pushContext()
开始一个新的命名空间上下文。
|
void |
reset()
重新设置此命名空间支持对象的重用。
|
void |
setNamespaceDeclUris(boolean value)
控制是否命名空间属性被放置在
NSDECL 命名空间的
processName() 。
|
public static final String XMLNS
http://www.w3.org/XML/1998/namespace
在“XML”推荐的命名空间中定义。
这是命名空间URI,自动映射到“XML”前缀。
public static final String NSDECL
http://www.w3.org/xmlns/2000/
,定义在向后兼容的勘误为“XML命名空间”的建议。因为勘误远期SAX2,SAX2默认为原来的推荐,并且通常不使用这个URI。
这是命名空间URI,可应用于:* xmlns和xmlns属性,它是用于声明命名空间。
setNamespaceDeclUris(boolean)
,
isNamespaceDeclUris()
,
Constant Field Values
public void reset()
在重用新会话的命名空间支持对象之前调用此方法是必要的。如果命名空间URI进行支撑,那面国旗也必须设置为非默认值。
public void pushContext()
事件回调代码应该每一个元素一次启动一个新的上下文。这意味着在两个地方都准备好了。元素不包括命名空间声明,ContentHandler startelement()回调是正确的地方。对于这样一个声明的元素,它会在第一startprefixmapping() ContentHandler做回调。一个布尔标志可以用来跟踪一个上下文是否已经开始了。当这些方法中的任何一个都被调用时,它会检查标志,看看是否需要开始一个新的上下文。如果是的话,它启动上下文并设置标志。后startelement() ContentHandler。不,它总是清除标志。
通常,SAX的司机会在每个XML元素的开始推一个新的上下文。然后他们进行第一次通过属性来处理所有的命名空间声明,使startprefixmapping()回调ContentHandler。然后,作出第二个传递,以确定所有属性和元素名称的命名空间限定的名称。最后,所有的信息startelement() ContentHandler。回调是可用的,所以它可以使。
命名空间支持对象总是在已生效的基本上下文开始:在这种上下文中,只有“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限定名当前上下文中删除前缀和看它在前缀目前申报。返回值将是由调用方提供的数组,填充如下:
数组中的所有字符串都将被内部化。如果原始名称有一个未声明的前缀,则返回值将为空。
注意,属性名称的处理方式不是元素名称:一个没有前缀的元素名称将默认的命名空间(如果有的话),而一个没有前缀的属性名称将不。
qName
- XML限定名被处理。
parts
-由调用者提供一个数组,能够容纳至少三名成员。
isAttribute
-指示这是一个属性名称的标志(真)或元素名称(假)。
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)
NSDECL
命名空间的
processName()
。这可能只是改变在任何情况下被推。
IllegalStateException
-试图设置在任何上下文被推的时候。
public boolean isNamespaceDeclUris()
Submit a bug or feature
For further API reference and developer documentation, see Java SE Documentation. That documentation contains more detailed, developer-targeted descriptions, with conceptual overviews, definitions of terms, workarounds, and working code examples.
Copyright © 1993, 2014, Oracle and/or its affiliates. All rights reserved.