public interface Attr
Attr
接口表示 Element
对象中的属性。通常该属性所允许的值定义在与文档相关的模式中。
Attr
对象继承 Node
接口,但由于它们实际上不是它们描述的元素的子节点,DOM 不会将它们看作文档树的一部分。因此,Node
的属性 parentNode
、previousSibling
和 nextSibling
具有用于 Attr
对象的 null
值。DOM 认为元素的属性是其特性,而不是一个来自于它们所关联的元素的独立的身份;这应该使实现把这种特征作为与所有给定类型的元素相关联的默认属性更为有效。此外,Attr
节点不可以是 DocumentFragment
的直接子节点。不过,它们可以与包含在 DocumentFragment
内的 Element
节点相关联。简而言之,DOM 的用户和实现者需要知道 Attr
节点与从 Node
接口继承的其他对象有些共同之处,但它们还是截然不同的。
该属性的有效值按如下方式确定:如果为此属性明确分配了任何值,则此值为该属性的有效值;否则,如果声明了此属性,且该声明包括默认值,则该默认值为属性的有效值;否则,直到明确添加了属性,该属性才会存在于结构模型中的这一元素上。注意,Attr
实例上的 Node.nodeValue
属性还可以用于检索该属性值的字符串版本。
如果该属性未在实例文档中明确给定值,但有与文档相关的模式提供的一个默认值,则创建属性节点时把 specified
设置为 false
。移除在模式中为其定义了默认值的属性节点将生成一个具有默认值和 specified
设置为 false
的新属性节点。如果调用 Document.normalizeDocument()
时出现确认,则按照由模式提供的默认属性值重新计算 specified
等于 false
的属性节点。如果没有默认值与模式中的这一属性相关联,则该属性节点被丢弃。
在 XML 中,属性值可以包含实体引用,Attr
节点的子节点可以是 Text
或 EntityReference
节点(当使用这些节点时;有关讨论,请参阅 EntityReference
的描述)。
DOM Core 表示作为简单字符串的所有属性值,即使与文档相关联的 DTD 或模式声明它们是某个特定类型(如 tokenized)。
由 DOM 实现执行的属性值规范化的方式取决于该实现对使用的模式的了解程度。通常,Attr
节点的 value
和 nodeValue
属性最初返回由解析器给定的标准化值。调用 Document.normalizeDocument()
之后的情况也是这样(假定设置了正确的选项)。但变化后可能不是这样,与是通过直接设置字符串值还是通过更改 Attr
子节点执行变化无关。特别是,当涉及 character references 时、给出那些不在 DOM 中表示的和影响属性值标准化的时是这种情况,另一方面,如果该实现知道更改属性值时使用的模式,且它与 CDATA 属于不同的类型,则它可以在该时再一次对其执行标准化。对于特殊的 DOM 实现(如 SVG DOM 实现)而言尤其如此,这些实现都会以不同于字符串的内部形式存储属性值。
下表给出了一些示例,表示初始文档中的属性(已解析的属性)值、在 DOM 中公开的值和序列化的值之间的关系:
以下是例子 | 已解析的属性值 | 初始 Attr.value |
已序列化的属性值 |
---|---|---|---|
字符引用 | "x²=5" |
"x?=5" |
"x²=5" |
内置的字符实体 | "y<6" |
"y<6" |
"y<6" |
以下值之间的字面值新行 | "x=5 y=6" |
"x=5 y=6" |
"x=5 y=6" |
以下值之间的已标准化新行 | "x=5 y=6" |
"x=5 y=6" |
"x=5 y=6" |
具有字面值新行的实体 e |
<!ENTITY e '... ...'> [...]> "x=5&e;y=6" |
对实现和加载选项的依赖性 | 对实现和加载/保存选项的依赖性 |
另请参见 Document Object Model (DOM) Level 3 Core Specification。
字段摘要 |
---|
方法摘要 | |
---|---|
String |
getName() 返回此属性的名称。 |
Element |
getOwnerElement() 此属性连接到的 Element 节点;如果未使用此属性,则为 null 。 |
TypeInfo |
getSchemaTypeInfo() 与此属性相关联的类型信息。 |
boolean |
getSpecified() 如果在实例文档中显式给此属性一个值,则为 True ;否则为 false 。 |
String |
getValue() 检索时,该属性值以字符串形式返回。 |
boolean |
isId() 返回是否此属性属于类型 ID(即包含其所有者元素的标识符)。 |
void |
setValue(String value) 检索时,该属性值以字符串形式返回。 |
方法详细信息 |
---|
String getName()
Node.localName
与
null
不同,则此属性是一个限定名称。
boolean getSpecified()
True
;否则为
false
。如果应用程序更改了此属性节点的值(即使它在结尾时有与默认值相同的值),则将它设置为
true
。类似地,该实现可以根据其他模式处理具有默认值的属性,但应用程序应该使用
Document.normalizeDocument()
来保证此信息最新。
String getValue()
Element
接口上的方法
getAttribute
。
Text
节点,即将 XML 处理器识别为标记的所有字符视为字面值文本。另请参见方法
Element.setAttribute()
。
void setValue(String value) throws DOMException
Element
接口上的方法
getAttribute
。
Text
节点,即将 XML 处理器识别为标记的所有字符视为字面值文本。另请参见方法
Element.setAttribute()
。
DOMException
- NO_MODIFICATION_ALLOWED_ERR:当节点为只读的时引发此异常。
Element getOwnerElement()
Element
节点;如果未使用此属性,则为
null
。
TypeInfo getSchemaTypeInfo()
Document.normalizeDocument()
之后保证此属性中包含的类型信息正确时,如果节点被移动,则
schemaTypeInfo
不能不可靠。
boolean isId()
Document.getElementById
检索此属性的
ownerElement
。实现可以使用几种方法确定是否知道属性节点包含标识符:
Document.normalizeDocument()
时出现使用 XML Schema [XML Schema Part 1] 的验证,则使用后模式验证信息集贡献(PSVI 贡献)值确定此属性是否是使用 [XPointer] 中的 schema-determined ID 定义的模式确定的 ID 属性。 Document.normalizeDocument()
时使用 DTD 进行验证,则使用信息集 [type definition] 值确定此属性是否是使用 [XPointer] 中的 DTD-determined ID 定义的 DTD 确定的 ID 属性。 Element.setIdAttribute()
、Element.setIdAttributeNS()
或 Element.setIdAttributeNode()
的属性,即它是用户确定的 ID 属性; 注: XPointer 框架(参阅 [XPointer] 中的 3.2 节)将 DOM 用户确定的 ID 属性视为 XPointer 外部确定的 ID 定义的一部分。
Document.normalizeDocument()
时出现确认,则重置所有用户确定的 ID 属性,然后重新评诂所有属性节点 ID 信息与使用的模式是否一致。因此,如果
Attr.schemaTypeInfo
属性包含 ID 类型,则
isId
将始终返回 true。