Module java.xml
Package org.w3c.dom

Interface Attr

所有超级接口:
Node

public interface Attr extends Node
Attr接口表示Element对象中的属性。通常,属性的允许值在与文档关联的模式中定义。

Attr对象继承了Node接口,但由于它们实际上不是元素的子节点,因此DOM不认为它们是文档树的一部分。因此,对于Attr对象,Node属性parentNodepreviousSiblingnextSibling的值为null。DOM认为属性是元素的属性,而不是与其关联的元素具有单独的标识;这应该使得实现与给定类型的所有元素关联的默认属性等功能更有效。此外,Attr节点可能不是DocumentFragment的直接子节点。但是,它们可以与DocumentFragment中包含的Element节点关联。简而言之,DOM的用户和实现者需要意识到Attr节点与继承Node接口的其他对象有一些共同之处,但它们也是完全不同的。

属性的有效值确定如下:如果为此属性明确分配了任何值,则该值为属性的有效值;否则,如果存在此属性的声明,并且该声明包含默认值,则该默认值为属性的有效值;否则,在将属性明确添加之前,该属性在结构模型中不存在于此元素中。请注意,Attr实例上的Node.nodeValue属性也可用于检索属性值的字符串版本。

如果在实例文档中未明确为属性赋值,但模式与文档关联提供了默认值,则将创建一个specified设置为false的属性节点。从模式中定义了默认值的属性节点会生成一个新的属性节点,并将specified设置为false。在调用Document.normalizeDocument()时进行验证,specified等于false的属性节点将根据模式提供的默认属性值重新计算。如果模式中未关联此属性的默认值,则将丢弃属性节点。

在XML中,属性的值可以包含实体引用,Attr节点的子节点可以是TextEntityReference节点(在使用时;请参阅EntityReference的描述进行讨论)。

DOM核心将所有属性值表示为简单字符串,即使与文档关联的DTD或模式将其声明为某种特定类型,如标记化。

DOM实现执行的属性值规范化方式取决于实现对使用的模式了解的程度。通常,Attr节点的valuenodeValue属性最初返回解析器给出的规范化值。在调用Document.normalizeDocument()之后也是如此(假设已设置正确的选项)。但是,无论是通过直接设置字符串值还是通过更改Attr子节点来执行突变,这在某些情况下可能不成立。特别是在涉及字符引用时,因为它们在DOM中没有表示,并且它们会影响属性值规范化。另一方面,如果实现在更改属性值时了解所使用的模式,并且它的类型与CDATA不同,则可能会在那时再次对其进行规范化。这对于专门的DOM实现特别适用,例如存储属性值在与字符串不同的内部形式中的一些[SVG 1.1]实现。

以下表格提供了原始文档中属性值(解析属性)、在DOM中公开的值以及值的序列化之间的关系的一些示例:

原始值、规范化值和序列化值的示例
示例 解析的属性值 初始Attr.value 序列化的属性值
字符引用
"x²=5"
"x²=5"
"x²=5"
内置字符实体
"y<6"
"y<6"
"y&lt;6"
字面换行符之间
 "x=5&#10;y=6"
"x=5 y=6"
"x=5&#10;y=6"
规范化换行符之间
"x=5
 y=6"
"x=5 y=6"
"x=5 y=6"
带有字面换行符的实体e
 <!ENTITY e '...&#10;...'> [...]> "x=5&e;y=6"
取决于实现和加载选项 取决于实现和加载/保存选项

另请参阅文档对象模型(DOM)Level 3 Core规范

  • Method Details

    • getName

      String getName()
      返回此属性的名称。如果Node.localNamenull不同,则此属性是合格名称。
    • getSpecified

      boolean getSpecified()
      如果此属性在实例文档中明确给定了值,则为True,否则为false。如果应用程序更改了此属性节点的值(即使最终具有与默认值相同的值),则将其设置为true。实现可能以类似的方式处理来自其他模式的具有默认值的属性,但应用程序应使用Document.normalizeDocument()来确保此信息是最新的。
    • getValue

      String getValue()
      在检索时,属性的值将作为字符串返回。字符和一般实体引用将替换为它们的值。另请参阅Element接口上的getAttribute方法。
      在设置时,这将创建一个带有字符串未解析内容的Text节点,即XML处理器将识别为标记的任何字符都将被视为文字。另请参阅Element.setAttribute()方法。
      一些专门的实现,例如一些[SVG 1.1]实现,甚至在突变后可能会自动进行规范化;在这种情况下,检索时的值可能与设置时的值不同。
    • setValue

      void setValue(String value) throws DOMException
      在检索时,属性的值将作为字符串返回。字符和一般实体引用将替换为它们的值。另请参阅Element接口上的getAttribute方法。
      在设置时,这将创建一个带有字符串未解析内容的Text节点,即XML处理器将识别为标记的任何字符都将被视为文字。另请参阅Element.setAttribute()方法。
      一些专门的实现,例如一些[SVG 1.1]实现,甚至在突变后可能会自动进行规范化;在这种情况下,检索时的值可能与设置时的值不同。
      抛出:
      DOMException - 当节点是只读时引发NO_MODIFICATION_ALLOWED_ERR。
    • getOwnerElement

      Element getOwnerElement()
      此属性附加到的Element节点,如果此属性未在使用中,则为null
      自从:
      1.4, DOM Level 2
    • getSchemaTypeInfo

      TypeInfo getSchemaTypeInfo()
      与此属性关联的类型信息。虽然在加载文档或调用Document.normalizeDocument()后,此属性中包含的类型信息保证是正确的,但如果节点被移动,则schemaTypeInfo可能不可靠。
      自从:
      1.5, DOM Level 3
    • isId

      boolean isId()
      返回此属性是否已知为ID类型(即包含其所有者元素的标识符)或不是。当它是并且其值是唯一的时,可以使用方法Document.getElementById检索此属性的ownerElement。实现可以使用多种方法来确定属性节点是否已知包含标识符:
      • 如果在加载文档时或在调用Document.normalizeDocument()时使用XML Schema进行验证,那么将使用后模式验证信息集贡献(PSVI贡献)的值来确定此属性是否是模式确定的ID属性,使用[XPointer]中的模式确定的ID定义。
      • 如果在加载文档时或在调用Document.normalizeDocument()时使用DTD进行验证,则将使用信息集[类型定义]值来确定此属性是否是DTD确定的ID属性,使用[XPointer]中的DTD确定的ID定义。
      • 通过使用方法Element.setIdAttribute()Element.setIdAttributeNS()Element.setIdAttributeNode(),即用户确定的ID属性;

        注意: XPointer框架(参见[XPointer]中的第3.2节)将DOM用户确定的ID属性视为XPointer外部确定的ID定义的一部分。

      • 使用超出本规范范围的机制,那么它就是外部确定的ID属性。这包括使用不同于XML模式和DTD的模式语言。

      如果在调用Document.normalizeDocument()时进行验证,则所有用户确定的ID属性将被重置,并且所有属性节点ID信息将根据使用的模式重新评估。因此,如果Attr.schemaTypeInfo属性包含ID类型,则isId将始终返回true。
      自:
      1.5,DOM Level 3