Skip to content


Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

494 lines (369 sloc) 18.455 kb

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.5 / unrelease

  • New Features

    • Nokogiri::HTML::Document#title accessor gets and sets the document title.

  • 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

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

    • 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:

    • 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 namepsaces (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::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)


  • 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


  • 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.


  • 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


  • 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


  • 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


  • Bugfixes

    • Changed memory mangement from weak refs to document refs

    • Plugged some memory leaks

    • Builder blocks can call methods from surrounding contexts


  • 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 Bugfix

    • extconf.rb should not check for frex and racc


  • 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!

Jump to Line
Something went wrong with that request. Please try again.