Skip to content

jsoup Java HTML Parser release 1.17.2

Compare
Choose a tag to compare
@jhy jhy released this 29 Dec 03:29
· 117 commits to master since this release
9dec1ba

Improvements

  • Attribute object accessors: Added Element.attribute(String) and Attributes.attribute(String) to more simply
    obtain an Attribute object. 2069
  • Attribute source tracking: If source tracking is on, and an Attribute's key is changed (
    via Attribute.setKey(String)), the source range is now still tracked
    in Attribute.sourceRange(). 2070
  • Wildcard attribute selector: Added support for the [*] element with any attribute selector. And also restored
    support for selecting by an empty attribute name prefix ([^]). 2079

Bug Fixes

  • Mixed-cased source position: When tracking the source position of attributes, if the source attribute name was
    mix-cased but the parser was lower-case normalizing attribute names, the source position for that attribute was not
    tracked correctly. 2067
  • Source position NPE: When tracking the source position of a body fragment parse, a null pointer
    exception was thrown. 2068
  • Multi-point emoji entity: A multi-point encoded emoji entity may be incorrectly decoded to the replacement
    character. 2074
  • Selector sub-expressions: (Regression) in a selector like parent [attr=va], other, the , OR was binding
    to [attr=va] instead of parent [attr=va], causing incorrect selections. The fix includes a EvaluatorDebug class
    that generates a sexpr to represent the query, allowing simpler and more thorough query parse
    tests. 2073
  • XML CData output: When generating XML-syntax output from parsed HTML, script nodes containing (pseudo) CData
    sections would have an extraneous CData section added, causing script execution errors. Now, the data content is
    emitted in a HTML/XML/XHTML polyglot format, if the data is not already within a CData
    section. 2078
  • Thread safety: The :has evaluator held a non-thread-safe Iterator, and so if an Evaluator object was
    shared across multiple concurrent threads, a NoSuchElement exception may be thrown, and the selected results may be
    incorrect. Now, the iterator object is a thread-local. 2088