== 1.5.4 / unreleased * Features * The "nokogiri" script now has more verbose output when passed the `--rng` option. #675 (Thanks, Dan Radez!) * Build support on hardened Debian systems that use `-Werror=format-security`. #680. * Better build support for systems with pkg-config. #584 * Better build support for systems with multiple iconv installations. * Bugfixes * Segmentation fault when creating a comment node for a DocumentFragment. #677, #678. * Treat '.' as xpath in at() and search(). #690 * [MRI, Security] Default parse options for XML documents were changed to not make network connections during document parsing, to avoid XXE vulnerability. #693 To re-enable this behavior, the configuration method `nononet` may be called, like this: Nokogiri::XML::Document.parse(xml) { |config| config.nononet } Insert your own joke about double-negatives here. == 1.5.3 / 2012-06-01 * Features * Support for "prefixless" CSS selectors ~, > and + like jQuery supports. #621, #623. (Thanks, David Lee!) * Attempting to improve installation on homebrew 0.9 (with regards to iconv). Isn't package management convenient? * Bugfixes * Custom xpath functions with empty nodeset arguments cause a segfault. #634. * Nokogiri::XML::Node#css now works for XML documents with default namespaces when the rule contains attribute selector without namespace. * Fixed marshalling bugs around how arguments are passed to (and returned from) XSLT custom xpath functions. #640. * Nokogiri::XML::Reader#outer_xml is broken in JRuby #617 * Nokogiri::XML::Attribute on JRuby returns a nil namespace #647 * Nokogiri::XML::Node#namespace= cannot set a namespace without a prefix on JRuby #648 * [JRuby] 1.9 mode causes dead lock while running rake #571 * HTML::Document#meta_encoding does not raise exception on docs with malformed content-type. #655 * Fixing segfault related to unsupported encodings in in-context parsing on 1.8.7. #643 * [JRuby] Concurrency issue in XPath parsing. #682 == 1.5.2 / 2012-03-09 Repackaging of 1.5.1 with a gemspec that is compatible with older Rubies. #631, #632. == 1.5.1 / 2012-03-09 * Features * XML::Builder#comment allows creation of comment nodes. * CSS searches now support namespaced attributes. #593 * Java integration feature is added. Now, XML::Document.wrap and XML::Document#to_java methods are available. * RelaxNG validator support in the `nokogiri` cli utility. #591 (thanks, Dan Radez!) * Bugfixes * Fix many memory leaks and segfault opportunities. Thanks, Tim Elliott! * extconf searches homebrew paths if homebrew is installed. * Inconsistent behavior of Nokogiri 1.5.0 Java #620 * Inheriting from Nokogiri::XML::Node on JRuby (1.6.4/5) fails #560 * XML::Attr nodes are not allowed to be added as node children, so an exception is raised. #558 * No longer defensively "pickle" adjacent text nodes on Node#add_next_sibling and Node#add_previous_sibling calls. #595. * Java version inconsistency: it returns nil for empty attributes #589 * to_xhtml incorrectly generates

when tag is empty #557 * Document#add_child now accepts a Node, NodeSet, DocumentFragment, or String. #546. * Document#create_element now recognizes namespaces containing non-word characters (like "SOAP-ENV"). This is mostly relevant to users of Builder, which calls Document#create_element for nearly everything. #531. * File encoding broken in 1.5.0 / jruby / windows #529 * Java version does not return namespace defs as attrs for ::HTML #542 * Bad file descriptor with Nokogiri 1.5.0 #495 * remove_namespace! doesn't work in pure java version #492 * The Nokogiri Java native build throws a null pointer exception when ActiveSupport's .blank? method is called directly on a parsed object. #489 * 1.5.0 Not using correct character encoding #488 * Raw XML string in XML Builder broken on JRuby #486 * Nokogiri 1.5.0 XML generation broken on JRuby #484 * Do not allow multiple root nodes. #550 * Fixes for custom XPath functions. #605, #606 (thanks, Juan Wajnerman!) * Node#to_xml does not override :save_with if it is provided. #505 * Node#set is a private method [JRuby]. #564 (thanks, Nick Sieger!) * C14n cleanup and Node#canonicalize (thanks, Ivan Pirlik!) #563 == 1.5.0 / 2011-07-01 * Notes * See changelog from 1.4.7 * Features * extracted sets of Node::SaveOptions into Node::SaveOptions::DEFAULT_{X,H,XH}TML (refactor) * Bugfixes * default output of XML on JRuby is no longer formatted due to inconsistent whitespace handling. #415 * (JRuby) making empty NodeSets with null `nodes` member safe to operate on. #443 * Fix a bug in advanced encoding detection that leads to partially duplicated document when parsing an HTML file with unknown encoding. * Add support for . == 1.5.0 beta3 / 2010/12/02 * Notes * JRuby performance tuning * See changelog from 1.4.4 * Bugfixes * Node#inner_text no longer returns nil. (JRuby) #264 == 1.5.0 beta2 / 2010/07/30 * Notes * See changelog from 1.4.3 == 1.5.0 beta1 / 2010/05/22 * Notes * JRuby support is provided by a new pure-java backend. * Deprecations * Ruby 1.8.6 is deprecated. Nokogiri will install, but official support is ended. * LibXML 2.6.16 and earlier are deprecated. Nokogiri will refuse to install. * FFI support is removed. === 1.4.7 / 2011-07-01 * Bugfixes * Fix a bug in advanced encoding detection that leads to partially duplicated document when parsing an HTML file with unknown encoding. Thanks, Timothy Elliott (@ender672)! #478 === 1.4.6 / 2011-06-19 * Notes * This version is functionally identical to 1.4.5. * Ruby 1.8.6 support has been restored. === 1.4.5 / 2011-05-19 * New Features * Nokogiri::HTML::Document#title accessor gets and sets the document title. * extracted sets of Node::SaveOptions into Node::SaveOptions::DEFAULT_{X,H,XH}TML (refactor) * Raise an exception if a string is passed to Nokogiri::XML::Schema#validate. #406 * Bugfixes * Node#serialize-and-friends now accepts a SaveOption object as the, erm, save object. * Nokogiri::CSS::Parser has-a Nokogiri::CSS::Tokenizer * [JRUBY+FFI only] Weak references are now threadsafe. #355 * Make direct start_element() callback (currently used for HTML::SAX::Parser) pass attributes in assoc array, just as emulated start_element() callback does. rel. #356 * HTML::SAX::Parser should call back a block given to parse*() if any, just as XML::SAX::Parser does. * Add further encoding detection to HTML parser that libxml2 does not do. * Document#remove_namespaces! now handles attributes with namespaces. #396 * XSLT::Stylesheet#transform no longer segfaults when handed a non-XML::Document. #452 * XML::Reader no longer segfaults when under GC pressure. #439 === 1.4.4 / 2010-11-15 * New Features * XML::Node#children= sets the node's inner html (much like #inner_html=), but returns the reparent node(s). * XSLT supports function extensions. #336 * XPath bind parameter substitution. #329 * XML::Reader node type constants. #369 * SAX Parser context provides line and column information * Bugfixes * XML::DTD#attributes returns an empty hash instead of nil when there are no attributes. * XML::DTD#{keys,each} now work as expected. #324 * {XML,HTML}::DocumentFragment.{new,parse} no longer strip leading and trailing whitespace. #319 * XML::Node#{add_child,add_previous_sibling,add_next_sibling,replace} return a NodeSet when passed a string. * Unclosed tags parsed more robustly in fragments. #315 * XML::Node#{replace,add_previous_sibling,add_next_sibling} edge cases fixed related to libxml's text node merging. #308 * Fixed a segfault when GC occurs during xpath handler argument marshalling. #345 * Added hack to Slop decorator to work with previously defined methods. #330 * Fix a memory leak when duplicating child nodes. #353 * Fixed off-by-one bug with nth-last-{child,of-type} CSS selectors when NOT using an+b notation. #354 * Fixed passing of non-namespace attributes to SAX::Document#start_element. #356 * Workaround for libxml2 in-context parsing bug. #362 * Fixed NodeSet#wrap on nodes within a fragment. #331 === 1.4.3 / 2010/07/28 * New Features * XML::Reader#empty_element? returns true for empty elements. #262 * Node#remove_namespaces! now removes namespace *declarations* as well. #294 * NodeSet#at_xpath, NodeSet#at_css and NodeSet#> do what the corresponding methods of Node do. * Bugfixes * XML::NodeSet#{include?,delete,push} accept an XML::Namespace * XML::Document#parse added for parsing in the context of a document * XML::DocumentFragment#inner_html= works with contextual parsing! #298, #281 * lib/nokogiri/css/parser.y Combined CSS functions + pseudo selectors fixed * Reparenting text nodes is safe, even when the operation frees adjacent merged nodes. #283 * Fixed libxml2 versionitis issue with xmlFirstElementChild et al. #303 * XML::Attr#add_namespace now works as expected. #252 * HTML::DocumentFragment uses the string's encoding. #305 * Fix the CSS3 selector translation rule for the general sibling combinator (a.k.a. preceding selector) that incorrectly converted "E ~ F G" to "//F//G[preceding-sibling::E]". === 1.4.2 / 2010/05/22 * New Features * XML::Node#parse will parse XML or HTML fragments with respect to the context node. * XML::Node#namespaces returns all namespaces defined in the node and all ancestor nodes (previously did not return ancestors' namespace definitions). * Added Enumerable to XML::Node * Nokogiri::XML::Schema#validate now uses xmlSchemaValidateFile if a filename is passed, which is faster and more memory-efficient. GH #219 * XML::Document#create_entity will create new EntityDecl objects. GH #174 * JRuby FFI implementation no longer uses ObjectSpace._id2ref, instead using Charles Nutter's rocking Weakling gem. * Nokogiri::XML::Node#first_element_child fetch the first child node that is an ELEMENT node. * Nokogiri::XML::Node#last_element_child fetch the last child node that is an ELEMENT node. * Nokogiri::XML::Node#elements fetch all children nodes that are ELEMENT nodes. * Nokogiri::XML::Node#add_child, #add_previous_sibling, #before, #add_next_sibling, #after, #inner_html, #swap and #replace all now accept a Node, DocumentFragment, NodeSet, or a string containing markup. * Node#fragment? indicates whether a node is a DocumentFragment. * Bugfixes * XML::NodeSet is now always decorated (if the document has decorators). GH #198 * XML::NodeSet#slice gracefully handles offset+length larger than the set length. GH #200 * XML::Node#content= safely unlinks previous content. GH #203 * XML::Node#namespace= takes nil as a parameter * XML::Node#xpath returns things other than NodeSet objects. GH #208 * XSLT::StyleSheet#transform accepts hashes for parameters. GH #223 * Psuedo selectors inside not() work. GH #205 * XML::Builder doesn't break when nodes are unlinked. Thanks to vihai! GH #228 * Encoding can be forced on the SAX parser. Thanks Eugene Pimenov! GH #204 * XML::DocumentFragment uses XML::Node#parse to determine children. * Fixed a memory leak in xml reader. Thanks sdor! GH #244 * Node#replace returns the new child node as claimed in the RDoc. Previously returned +self+. * Notes * The Windows gems now bundle DLLs for libxml 2.7.6 and libxslt 1.1.26. Prior to this release, libxml 2.7.3 and libxslt 1.1.24 were bundled. === 1.4.1 / 2009/12/10 * New Features * Added Nokogiri::LIBXML_ICONV_ENABLED * Alias Node#[] to Node#attr * XML::Node#next_element added * XML::Node#> added for searching a nodes immediate children * XML::NodeSet#reverse added * Added fragment support to Node#add_child, Node#add_next_sibling, Node#add_previous_sibling, and Node#replace. * XML::Node#previous_element implemented * Rubinius support * Ths CSS selector engine now supports :has() * XML::NodeSet#filter() was added * XML::Node.next= and .previous= are aliases for add_next_sibling and add_previous_sibling. GH #183 * Bugfixes * XML fragments with namespaces do not raise an exception (regression in 1.4.0) * Node#matches? works in nodes contained by a DocumentFragment. GH #158 * Document should not define add_namespace() method. GH #169 * XPath queries returning namespace declarations do not segfault. * Node#replace works with nodes from different documents. GH #162 * Adding XML::Document#collect_namespaces * Fixed bugs in the SOAP4R adapter * Fixed bug in XML::Node#next_element for certain edge cases * Fixed load path issue with JRuby under Windows. GH #160. * XSLT#apply_to will honor the "output method". Thanks richardlehane! * Fragments containing leading text nodes with newlines now parse properly. GH #178. === 1.4.0 / 2009/10/30 * Happy Birthday! * New Features * Node#at_xpath returns the first element of the NodeSet matching the XPath expression. * Node#at_css returns the first element of the NodeSet matching the CSS selector. * NodeSet#| for unions GH #119 (Thanks Serabe!) * NodeSet#inspect makes prettier output * Node#inspect implemented for more rubyish document inspecting * Added XML::DTD#external_id * Added XML::DTD#system_id * Added XML::ElementContent for DTD Element content validity * Better namespace declaration support in Nokogiri::XML::Builder * Added XML::Node#external_subset * Added XML::Node#create_external_subset * Added XML::Node#create_internal_subset * XML Builder can append raw strings (GH #141, patch from dudleyf) * XML::SAX::ParserContext added * XML::Document#remove_namespaces! for the namespace-impaired * Bugfixes * returns nil when HTML documents do not declare a meta encoding tag. GH #115 * Uses RbConfig::CONFIG['host_os'] to adjust ENV['PATH'] GH #113 * NodeSet#search is more efficient GH #119 (Thanks Serabe!) * NodeSet#xpath handles custom xpath functions * Fixing a SEGV when XML::Reader gets attributes for current node * Node#inner_html takes the same arguments as Node#to_html GH #117 * DocumentFragment#css delegates to it's child nodes GH #123 * NodeSet#[] works with slices larger than NodeSet#length GH #131 * Reparented nodes maintain their namespace. GH #134 * Fixed SEGV when adding an XML::Document to NodeSet * XML::SyntaxError can be duplicated. GH #148 * Deprecations * Hpricot compatibility layer removed === 1.3.3 / 2009/07/26 * New Features * NodeSet#children returns all children of all nodes * Bugfixes * Override libxml-ruby's global error handler * ParseOption#strict fixed * Fixed a segfault when sending an empty string to Node#inner_html= GH #88 * String encoding is now set to UTF-8 in Ruby 1.9 * Fixed a segfault when moving root nodes between documents. GH #91 * Fixed an O(n) penalty on node creation. GH #101 * Allowing XML documents to be output as HTML documents * Deprecations * Hpricot compatibility layer will be removed in 1.4.0 === 1.3.2 / 2009-06-22 * New Features * Nokogiri::XML::DTD#validate will validate your document * Bugfixes * Nokogiri::XML::NodeSet#search will search top level nodes. GH #73 * Removed namespace related methods from Nokogiri::XML::Document * Fixed a segfault when a namespace was added twice * Made nokogiri work with Snow Leopard GH #79 * Mailing list has moved to: http://groups.google.com/group/nokogiri-talk * HTML fragments now correctly handle comments and CDATA blocks. GH #78 * Nokogiri::XML::Document#clone is now an alias of dup * Deprecations * Nokogiri::XML::SAX::Document#start_element_ns is deprecated, please switch to Nokogiri::XML::SAX::Document#start_element_namespace * Nokogiri::XML::SAX::Document#end_element_ns is deprecated, please switch to Nokogiri::XML::SAX::Document#end_element_namespace === 1.3.1 / 2009-06-07 * Bugfixes * extconf.rb checks for optional RelaxNG and Schema functions * Namespace nodes are added to the Document node cache === 1.3.0 / 2009-05-30 * New Features * Builder changes scope based on block arity * Builder supports methods ending in underscore similar to tagz * Nokogiri::XML::Node#<=> compares nodes based on Document position * Nokogiri::XML::Node#matches? returns true if Node can be found with given selector. * Nokogiri::XML::Node#ancestors now returns an Nokogiri::XML::NodeSet * Nokogiri::XML::Node#ancestors will match parents against optional selector * Nokogiri::HTML::Document#meta_encoding for getting the meta encoding * Nokogiri::HTML::Document#meta_encoding= for setting the meta encoding * Nokogiri::XML::Document#encoding= to set the document encoding * Nokogiri::XML::Schema for validating documents against XSD schema * Nokogiri::XML::RelaxNG for validating documents against RelaxNG schema * Nokogiri::HTML::ElementDescription for fetching HTML element descriptions * Nokogiri::XML::Node#description to fetch the node description * Nokogiri::XML::Node#accept implements Visitor pattern * bin/nokogiri for easily examining documents (Thanks Yutaka HARA!) * Nokogiri::XML::NodeSet now supports more Array and Enumerable operators: index, delete, slice, - (difference), + (concatenation), & (intersection), push, pop, shift, == * Nokogiri.XML, Nokogiri.HTML take blocks that receive Nokogiri::XML::ParseOptions objects * Nokogiri::XML::Node#namespace returns a Nokogiri::XML::Namespace * Nokogiri::XML::Node#namespace= for setting a node's namespace * Nokogiri::XML::DocumentFragment and Nokogiri::HTML::DocumentFragment have a sensible API and a more robust implementation. * JRuby 1.3.0 support via FFI. * Bugfixes * Fixed a problem with nil passed to CDATA constructor * Fragment method deals with regular expression characters (Thanks Joel!) LH #73 * Fixing builder scope issues LH #61, LH #74, LH #70 * Fixed a problem when adding a child could remove the child namespace LH#78 * Fixed bug with unlinking a node then reparenting it. (GH#22) * Fixed failure to catch errors during XSLT parsing (GH#32) * Fixed a bug with attribute conditions in CSS selectors (GH#36) * Fixed intolerance of HTML attributes without values in Node#before/after/inner_html=. (GH#35) === 1.2.3 / 2009-03-22 * Bugfixes * Fixing bug where a node is passed in to Node#new * Namespace should be assigned on DocumentFragment creation. LH #66 * Nokogiri::XML::NodeSet#dup works GH #10 * Nokogiri::HTML returns an empty Document when given a blank string GH#11 * Adding a child will remove duplicate namespace declarations LH #67 * Builder methods take a hash as a second argument === 1.2.2 / 2009-03-14 * New features * Nokogiri may be used with soap4r. See XSD::XMLParser::Nokogiri * Nokogiri::XML::Node#inner_html= to set the inner html for a node * Nokogiri builder interface improvements * Nokogiri::XML::Node#swap swaps html for current node (LH #50) * Bugfixes * Fixed a tag nesting problem in the Builder API (LH #41) * Nokogiri::HTML.fragment will properly handle text only nodes (LH #43) * Nokogiri::XML::Node#before will prepend text nodes (LH #44) * Nokogiri::XML::Node#after will append text nodes * Nokogiri::XML::Node#search automatically registers root namespaces (LH #42) * Nokogiri::XML::NodeSet#search automatically registers namespaces * Nokogiri::HTML::NamedCharacters delegates to libxml2 * Nokogiri::XML::Node#[] can take a symbol (LH #48) * vasprintf for windows updated. Thanks Geoffroy Couprie! * Nokogiri::XML::Node#[]= should not encode entities (LH #55) * Namespaces should be copied to reparented nodes (LH #56) * Nokogiri uses encoding set on the string for default in Ruby 1.9 * Document#dup should create a new document of the same type (LH #59) * Document should not have a parent method (LH #64) === 1.2.1 / 2009-02-23 * Bugfixes * Fixed a CSS selector space bug * Fixed Ruby 1.9 String Encoding (Thanks 角谷さん!) === 1.2.0 / 2009-02-22 * New features * CSS search now supports CSS3 namespace queries * Namespaces on the root node are automatically registered * CSS queries use the default namespace * Nokogiri::XML::Document#encoding get encoding used for this document * Nokogiri::XML::Document#url get the document url * Nokogiri::XML::Node#add_namespace add a namespace to the node LH#38 * Nokogiri::XML::Node#each iterate over attribute name, value pairs * Nokogiri::XML::Node#keys get all attribute names * Nokogiri::XML::Node#line get the line number for a node (Thanks Dirkjan Bussink!) * Nokogiri::XML::Node#serialize now takes an optional encoding parameter * Nokogiri::XML::Node#to_html, to_xml, and to_xhtml take an optional encoding * Nokogiri::XML::Node#to_str * Nokogiri::XML::Node#to_xhtml to produce XHTML documents * Nokogiri::XML::Node#values get all attribute values * Nokogiri::XML::Node#write_to writes the node to an IO object with optional encoding * Nokogiri::XML::ProcessingInstrunction.new * Nokogiri::XML::SAX::PushParser for all your push parsing needs. * Bugfixes * Fixed Nokogiri::XML::Document#dup * Fixed header detection. Thanks rubikitch! * Fixed a problem where invalid CSS would cause the parser to hang * Deprecations * Nokogiri::XML::Node.new_from_str will be deprecated in 1.3.0 * API Changes * Nokogiri::HTML.fragment now returns an XML::DocumentFragment (LH #32) === 1.1.1 * New features * Added XML::Node#elem? * Added XML::Node#attribute_nodes * Added XML::Attr * XML::Node#delete added. * XML::NodeSet#inner_html added. * Bugfixes * Not including an HTML entity for \r for HTML nodes. * Removed CSS::SelectorHandler and XML::XPathHandler * XML::Node#attributes returns an Attr node for the value. * XML::NodeSet implements to_xml === 1.1.0 * New Features * Custom XPath functions are now supported. See Nokogiri::XML::Node#xpath * Custom CSS pseudo classes are now supported. See Nokogiri::XML::Node#css * Nokogiri::XML::Node#<< will add a child to the current node * Bugfixes * Mutex lock on CSS cache access * Fixed build problems with GCC 3.3.5 * XML::Node#to_xml now takes an indentation argument * XML::Node#dup takes an optional depth argument * XML::Node#add_previous_sibling returns new sibling node. === 1.0.7 * Bugfixes * Fixed memory leak when using Dike * SAX parser now parses IO streams * Comment nodes have their own class * Nokogiri() should delegate to Nokogiri.parse() * Prepending rather than appending to ENV['PATH'] on windows * Fixed a bug in complex CSS negation selectors === 1.0.6 * 5 Bugfixes * XPath Parser raises a SyntaxError on parse failure * CSS Parser raises a SyntaxError on parse failure * filter() and not() hpricot compatibility added * CSS searches via Node#search are now always relative * CSS to XPath conversion is now cached === 1.0.5 * Bugfixes * Added mailing list and ticket tracking information to the README.txt * Sets ENV['PATH'] on windows if it doesn't exist * Caching results of NodeSet#[] on Document === 1.0.4 * Bugfixes * Changed memory management from weak refs to document refs * Plugged some memory leaks * Builder blocks can call methods from surrounding contexts === 1.0.3 * 5 Bugfixes * NodeSet now implements to_ary * XML::Document should not implement parent * More GC Bugs fixed. (Mike is AWESOME!) * Removed RARRAY_LEN for 1.8.5 compatibility. Thanks Shane Hanna. * inner_html fixed. (Thanks Yehuda!) === 1.0.2 * 1 Bugfix * extconf.rb should not check for frex and racc === 1.0.1 * 1 Bugfix * Made sure extconf.rb searched libdir and prefix so that ports libxml/ruby will link properly. Thanks lucsky! === 1.0.0 / 2008-07-13 * 1 major enhancement * Birthday!