模块  java.xml
软件包  org.w3c.dom

Interface Attr

  • All Superinterfaces:
    Node

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

    Attr对象继承Node接口,但由于它们实际上不是它们描述的元素的子节点,因此DOM不认为它们是文档树的一部分。 因此, Node字段parentNodepreviousSibling ,和nextSibling具有null为值Attr对象。 DOM认为属性是元素的属性,而不是与它们关联的元素具有单独的标识; 这应该使得实现诸如与给定类型的所有元素相关联的默认属性之类的特征更有效。 此外, Attr节点可能不是一个立即的孩子DocumentFragment 然而,他们可以关联Element包含一个内节点DocumentFragment 简而言之,DOM的用户和实现者需要知道Attr节点与继承Node接口的其他对象有一些共同之处,但它们也非常不同。

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

    如果属性未在实例文档中显式赋予值但具有与文档关联的模式提供的默认值,则将创建属性节点,其中specified设置为false 删除在架构中定义了默认值的属性节点会生成一个新属性节点,其默认值为specified设置为false 如果在调用Document.normalizeDocument()验证,则根据模式提供的默认属性值重新计算具有specified属性节点等于false 如果没有默认值与架构中的此属性关联,则会丢弃属性节点。

    在XML中,属性的值可以包含实体引用, Attr节点的子节点可以是TextEntityReference节点(当这些节点正在使用时;请参阅EntityReference的说明以供讨论)。

    DOM Core将所有属性值表示为简单字符串,即使与文档关联的DTD或模式声明了某些特定类型(如tokenized)。

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

    下表给出了原始文档中的属性值(已解析的属性),DOM中公开的值以及值的序列化之间的关系的一些示例:

    Examples of the Original, Normalized and Serialized Values Examples Parsed attribute value Initial Attr.value Serialized attribute value Character reference
    "x²=5"
    "x²=5"
    "x²=5"
    Built-in character entity
    "y<6"
    "y<6"
    "y&lt;6"
    Literal newline between
     "x=5&#10;y=6"
    "x=5 y=6"
    "x=5&#10;y=6"
    Normalized newline between
    "x=5
     y=6"
    "x=5 y=6"
    "x=5 y=6"
    Entity e with literal newline
     <!ENTITY e '...&#10;...'> [...]> "x=5&e;y=6"
    Dependent on Implementation and Load Options Dependent on Implementation and Load/Save Options

    另见Document Object Model (DOM) Level 3 Core Specification

    • 方法详细信息

      • 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如果移动了节点,则schemaTypeInfo可能不可靠。
        从以下版本开始:
        1.5,DOM Level 3
      • isId

        boolean isId()
        返回此属性是否已知为类型ID(即包含其所有者元素的标识符)。 当它是和它的值是唯一的,所述ownerElement该属性可以使用该方法来检索Document.getElementById 实现可以使用多种方法来确定属性节点是否已知包含标识符:
        • 如果在加载文档时或在调用Document.normalizeDocument()时使用XML架构[ XML Schema Part 1 ]进行验证,则使用schema-determined ID定义来确定此属性是否为架构确定的ID属性后架构验证信息集贡献(PSVI贡献)值在[ XPointer ]。
        • 如果在加载文档时或在调用Document.normalizeDocument()时使用DTD进行验证,则使用信息集[类型定义]值来确定此属性是否是使用[ XPointer ]中的DTD-determined ID定义的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