-
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
-
Repackaging of 1.5.1 with a gemspec that is compatible with older Rubies. #631, #632.
-
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 <p /></p> 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
-
-
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 <meta charset=“…”>.
-
-
Notes
-
JRuby performance tuning
-
See changelog from 1.4.4
-
-
Bugfixes
-
Node#inner_text no longer returns nil. (JRuby) #264
-
-
Notes
-
See changelog from 1.4.3
-
-
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.
-
-
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
-
-
Notes
-
This version is functionally identical to 1.4.5.
-
Ruby 1.8.6 support has been restored.
-
-
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
-
-
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
-
-
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”.
-
-
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.
-
-
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.
-
-
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 to adjust ENV 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
-
-
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
-
-
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: 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
-
-
Bugfixes
-
extconf.rb checks for optional RelaxNG and Schema functions
-
Namespace nodes are added to the Document node cache
-
-
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)
-
-
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
-
-
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)
-
-
Bugfixes
-
Fixed a CSS selector space bug
-
Fixed Ruby 1.9 String Encoding (Thanks 角谷さん!)
-
-
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)
-
-
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 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 on windows if it doesn’t exist
-
Caching results of NodeSet#[] on Document
-
-
Bugfixes
-
Changed memory management 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 major enhancement
-
Birthday!
-