模块 java.xml

接口 Attr

所有父级接口:
Node

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

Attr 对象继承了 Node 接口,但由于它们实际上不是它们描述的元素的子节点,因此 DOM 不会将它们视为文档树的一部分。因此,Node 属性 parentNodepreviousSiblingnextSibling 具有 Attr 对象的 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 DOM 实现,它以不同于字符串的内部形式存储属性值。

下表给出了原始文档中的属性值(已解析的属性)、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"
Dependent on Implementation and Load Options Dependent on Implementation and Load/Save Options

另见 文档对象模型 (DOM) 级别 3 核心规范

  • 方法详情

    • 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 级别 3
    • isId

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

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

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

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