Class Attributes

java.lang.Object
org.jsoup.nodes.Attributes
All Implemented Interfaces:
Cloneable, Iterable<Attribute>

public class Attributes extends Object implements Iterable<Attribute>, Cloneable
The attributes of an Element.

During parsing, attributes in with the same name in an element are deduplicated, according to the configured parser's attribute case-sensitive setting. It is possible to have duplicate attributes subsequently if add(String, String) vs put(String, String) is used.

Attribute name and value comparisons are generally case sensitive. By default for HTML, attribute names are normalized to lower-case on parsing. That means you should use lower-case strings when referring to attributes by name.

  • Field Details

  • Constructor Details

    • Attributes

      public Attributes()
  • Method Details

    • checkCapacity

      private void checkCapacity(int minNewSize)
    • indexOfKey

      int indexOfKey(String key)
    • indexOfKeyIgnoreCase

      private int indexOfKeyIgnoreCase(String key)
    • checkNotNull

      static String checkNotNull(Object val)
    • get

      public String get(String key)
      Get an attribute value by key.
      Parameters:
      key - the (case-sensitive) attribute key
      Returns:
      the attribute value if set; or empty string if not set (or a boolean attribute).
      See Also:
    • attribute

      public Attribute attribute(String key)
      Get an Attribute by key. The Attribute will remain connected to these Attributes, so changes made via Attribute.setKey(String), Attribute.setValue(String) etc will cascade back to these Attributes and their owning Element.
      Parameters:
      key - the (case-sensitive) attribute key
      Returns:
      the Attribute for this key, or null if not present.
      Since:
      1.17.2
    • getIgnoreCase

      public String getIgnoreCase(String key)
      Get an attribute's value by case-insensitive key
      Parameters:
      key - the attribute name
      Returns:
      the first matching attribute value if set; or empty string if not set (ora boolean attribute).
    • add

      public Attributes add(String key, String value)
      Adds a new attribute. Will produce duplicates if the key already exists.
      See Also:
    • addObject

      private void addObject(String key, Object value)
    • put

      public Attributes put(String key, String value)
      Set a new attribute, or replace an existing one by key.
      Parameters:
      key - case sensitive attribute key (not null)
      value - attribute value (which can be null, to set a true boolean attribute)
      Returns:
      these attributes, for chaining
    • userData

      Map<String,Object> userData()
      Get the map holding any user-data associated with these Attributes. Will be created empty on first use. Held as an internal attribute, not a field member, to reduce the memory footprint of Attributes when not used. Can hold arbitrary objects; use for source ranges, connecting W3C nodes to Elements, etc.
      Returns:
      the map holding user-data
    • userData

      public Object userData(String key)
      Get an arbitrary user-data object by key.
      Parameters:
      key - case-sensitive key to the object.
      Returns:
      the object associated to this key, or null if not found.
      Since:
      1.17.1
      See Also:
    • userData

      public Attributes userData(String key, Object value)
      Set an arbitrary user-data object by key. Will be treated as an internal attribute, so will not be emitted in HTML.
      Parameters:
      key - case-sensitive key
      value - object value
      Returns:
      these attributes
      Since:
      1.17.1
      See Also:
    • putIgnoreCase

      void putIgnoreCase(String key, String value)
    • put

      public Attributes put(String key, boolean value)
      Set a new boolean attribute. Removes the attribute if the value is false.
      Parameters:
      key - case insensitive attribute key
      value - attribute value
      Returns:
      these attributes, for chaining
    • put

      public Attributes put(Attribute attribute)
      Set a new attribute, or replace an existing one by key.
      Parameters:
      attribute - attribute with case-sensitive key
      Returns:
      these attributes, for chaining
    • remove

      private void remove(int index)
    • remove

      public void remove(String key)
      Remove an attribute by key. Case sensitive.
      Parameters:
      key - attribute key to remove
    • removeIgnoreCase

      public void removeIgnoreCase(String key)
      Remove an attribute by key. Case insensitive.
      Parameters:
      key - attribute key to remove
    • hasKey

      public boolean hasKey(String key)
      Tests if these attributes contain an attribute with this key.
      Parameters:
      key - case-sensitive key to check for
      Returns:
      true if key exists, false otherwise
    • hasKeyIgnoreCase

      public boolean hasKeyIgnoreCase(String key)
      Tests if these attributes contain an attribute with this key.
      Parameters:
      key - key to check for
      Returns:
      true if key exists, false otherwise
    • hasDeclaredValueForKey

      public boolean hasDeclaredValueForKey(String key)
      Check if these attributes contain an attribute with a value for this key.
      Parameters:
      key - key to check for
      Returns:
      true if key exists, and it has a value
    • hasDeclaredValueForKeyIgnoreCase

      public boolean hasDeclaredValueForKeyIgnoreCase(String key)
      Check if these attributes contain an attribute with a value for this key.
      Parameters:
      key - case-insensitive key to check for
      Returns:
      true if key exists, and it has a value
    • size

      public int size()
      Get the number of attributes in this set, including any jsoup internal-only attributes. Internal attributes are excluded from the html(), asList(), and iterator() methods.
      Returns:
      size
    • isEmpty

      public boolean isEmpty()
      Test if this Attributes list is empty (size==0).
    • addAll

      public void addAll(Attributes incoming)
      Add all the attributes from the incoming set to this set.
      Parameters:
      incoming - attributes to add to these attributes.
    • sourceRange

      public Range.AttributeRange sourceRange(String key)
      Get the source ranges (start to end position) in the original input source from which this attribute's name and value were parsed.

      Position tracking must be enabled prior to parsing the content.

      Parameters:
      key - the attribute name
      Returns:
      the ranges for the attribute's name and value, or untracked if the attribute does not exist or its range was not tracked.
      Since:
      1.17.1
      See Also:
    • getRanges

      Get the Ranges, if tracking is enabled; null otherwise.
    • iterator

      public Iterator<Attribute> iterator()
      Specified by:
      iterator in interface Iterable<Attribute>
    • asList

      public List<Attribute> asList()
      Get the attributes as a List, for iteration.
      Returns:
      a view of the attributes as an unmodifiable List.
    • dataset

      public Map<String,String> dataset()
      Retrieves a filtered view of attributes that are HTML5 custom data attributes; that is, attributes with keys starting with data-.
      Returns:
      map of custom data attributes.
    • html

      public String html()
      Get the HTML representation of these attributes.
      Returns:
      HTML
    • html

      final void html(Appendable accum, Document.OutputSettings out) throws IOException
      Throws:
      IOException
    • toString

      public String toString()
      Overrides:
      toString in class Object
    • equals

      public boolean equals(Object o)
      Checks if these attributes are equal to another set of attributes, by comparing the two sets. Note that the order of the attributes does not impact this equality (as per the Map interface equals()).
      Overrides:
      equals in class Object
      Parameters:
      o - attributes to compare with
      Returns:
      if both sets of attributes have the same content
    • hashCode

      public int hashCode()
      Calculates the hashcode of these attributes, by iterating all attributes and summing their hashcodes.
      Overrides:
      hashCode in class Object
      Returns:
      calculated hashcode
    • clone

      public Attributes clone()
      Overrides:
      clone in class Object
    • normalize

      public void normalize()
      Internal method. Lowercases all (non-internal) keys.
    • deduplicate

      public int deduplicate(ParseSettings settings)
      Internal method. Removes duplicate attribute by name. Settings for case sensitivity of key names.
      Parameters:
      settings - case sensitivity
      Returns:
      number of removed dupes
    • dataKey

      private static String dataKey(String key)
    • internalKey

      static String internalKey(String key)
    • isInternalKey

      static boolean isInternalKey(String key)