nokogiri 1.8.5 → 1.13.9
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of nokogiri might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Gemfile +3 -21
- data/LICENSE-DEPENDENCIES.md +1159 -868
- data/LICENSE.md +5 -28
- data/README.md +196 -90
- data/bin/nokogiri +63 -50
- data/dependencies.yml +13 -59
- data/ext/nokogiri/depend +38 -358
- data/ext/nokogiri/extconf.rb +765 -420
- data/ext/nokogiri/gumbo.c +584 -0
- data/ext/nokogiri/html4_document.c +166 -0
- data/ext/nokogiri/html4_element_description.c +294 -0
- data/ext/nokogiri/html4_entity_lookup.c +37 -0
- data/ext/nokogiri/html4_sax_parser_context.c +119 -0
- data/ext/nokogiri/html4_sax_push_parser.c +95 -0
- data/ext/nokogiri/libxml2_backwards_compat.c +121 -0
- data/ext/nokogiri/nokogiri.c +228 -91
- data/ext/nokogiri/nokogiri.h +199 -88
- data/ext/nokogiri/test_global_handlers.c +40 -0
- data/ext/nokogiri/xml_attr.c +42 -37
- data/ext/nokogiri/xml_attribute_decl.c +21 -21
- data/ext/nokogiri/xml_cdata.c +14 -19
- data/ext/nokogiri/xml_comment.c +19 -26
- data/ext/nokogiri/xml_document.c +296 -217
- data/ext/nokogiri/xml_document_fragment.c +12 -16
- data/ext/nokogiri/xml_dtd.c +64 -58
- data/ext/nokogiri/xml_element_content.c +31 -26
- data/ext/nokogiri/xml_element_decl.c +25 -25
- data/ext/nokogiri/xml_encoding_handler.c +43 -18
- data/ext/nokogiri/xml_entity_decl.c +37 -35
- data/ext/nokogiri/xml_entity_reference.c +16 -18
- data/ext/nokogiri/xml_namespace.c +99 -54
- data/ext/nokogiri/xml_node.c +1107 -658
- data/ext/nokogiri/xml_node_set.c +178 -166
- data/ext/nokogiri/xml_processing_instruction.c +17 -19
- data/ext/nokogiri/xml_reader.c +277 -175
- data/ext/nokogiri/xml_relax_ng.c +52 -28
- data/ext/nokogiri/xml_sax_parser.c +112 -112
- data/ext/nokogiri/xml_sax_parser_context.c +112 -86
- data/ext/nokogiri/xml_sax_push_parser.c +36 -27
- data/ext/nokogiri/xml_schema.c +114 -35
- data/ext/nokogiri/xml_syntax_error.c +42 -21
- data/ext/nokogiri/xml_text.c +14 -18
- data/ext/nokogiri/xml_xpath_context.c +226 -115
- data/ext/nokogiri/xslt_stylesheet.c +265 -173
- data/gumbo-parser/CHANGES.md +63 -0
- data/gumbo-parser/Makefile +101 -0
- data/gumbo-parser/THANKS +27 -0
- data/gumbo-parser/src/Makefile +34 -0
- data/gumbo-parser/src/README.md +41 -0
- data/gumbo-parser/src/ascii.c +75 -0
- data/gumbo-parser/src/ascii.h +115 -0
- data/gumbo-parser/src/attribute.c +42 -0
- data/gumbo-parser/src/attribute.h +17 -0
- data/gumbo-parser/src/char_ref.c +22225 -0
- data/gumbo-parser/src/char_ref.h +29 -0
- data/gumbo-parser/src/char_ref.rl +2154 -0
- data/gumbo-parser/src/error.c +626 -0
- data/gumbo-parser/src/error.h +148 -0
- data/gumbo-parser/src/foreign_attrs.c +104 -0
- data/gumbo-parser/src/foreign_attrs.gperf +27 -0
- data/gumbo-parser/src/gumbo.h +943 -0
- data/gumbo-parser/src/insertion_mode.h +33 -0
- data/gumbo-parser/src/macros.h +91 -0
- data/gumbo-parser/src/parser.c +4875 -0
- data/gumbo-parser/src/parser.h +41 -0
- data/gumbo-parser/src/replacement.h +33 -0
- data/gumbo-parser/src/string_buffer.c +103 -0
- data/gumbo-parser/src/string_buffer.h +68 -0
- data/gumbo-parser/src/string_piece.c +48 -0
- data/gumbo-parser/src/svg_attrs.c +174 -0
- data/gumbo-parser/src/svg_attrs.gperf +77 -0
- data/gumbo-parser/src/svg_tags.c +137 -0
- data/gumbo-parser/src/svg_tags.gperf +55 -0
- data/gumbo-parser/src/tag.c +222 -0
- data/gumbo-parser/src/tag_lookup.c +382 -0
- data/gumbo-parser/src/tag_lookup.gperf +169 -0
- data/gumbo-parser/src/tag_lookup.h +13 -0
- data/gumbo-parser/src/token_buffer.c +79 -0
- data/gumbo-parser/src/token_buffer.h +71 -0
- data/gumbo-parser/src/token_type.h +17 -0
- data/gumbo-parser/src/tokenizer.c +3463 -0
- data/gumbo-parser/src/tokenizer.h +112 -0
- data/gumbo-parser/src/tokenizer_states.h +339 -0
- data/gumbo-parser/src/utf8.c +245 -0
- data/gumbo-parser/src/utf8.h +164 -0
- data/gumbo-parser/src/util.c +68 -0
- data/gumbo-parser/src/util.h +30 -0
- data/gumbo-parser/src/vector.c +111 -0
- data/gumbo-parser/src/vector.h +45 -0
- data/lib/nokogiri/class_resolver.rb +67 -0
- data/lib/nokogiri/css/node.rb +10 -8
- data/lib/nokogiri/css/parser.rb +397 -377
- data/lib/nokogiri/css/parser.y +250 -245
- data/lib/nokogiri/css/parser_extras.rb +54 -49
- data/lib/nokogiri/css/syntax_error.rb +3 -1
- data/lib/nokogiri/css/tokenizer.rb +107 -104
- data/lib/nokogiri/css/tokenizer.rex +3 -2
- data/lib/nokogiri/css/xpath_visitor.rb +218 -91
- data/lib/nokogiri/css.rb +50 -17
- data/lib/nokogiri/decorators/slop.rb +9 -7
- data/lib/nokogiri/extension.rb +31 -0
- data/lib/nokogiri/gumbo.rb +15 -0
- data/lib/nokogiri/html.rb +38 -27
- data/lib/nokogiri/{html → html4}/builder.rb +4 -2
- data/lib/nokogiri/{html → html4}/document.rb +103 -105
- data/lib/nokogiri/html4/document_fragment.rb +54 -0
- data/lib/nokogiri/{html → html4}/element_description.rb +3 -1
- data/lib/nokogiri/html4/element_description_defaults.rb +578 -0
- data/lib/nokogiri/{html → html4}/entity_lookup.rb +4 -2
- data/lib/nokogiri/{html → html4}/sax/parser.rb +17 -16
- data/lib/nokogiri/html4/sax/parser_context.rb +20 -0
- data/lib/nokogiri/{html → html4}/sax/push_parser.rb +12 -11
- data/lib/nokogiri/html4.rb +46 -0
- data/lib/nokogiri/html5/document.rb +91 -0
- data/lib/nokogiri/html5/document_fragment.rb +83 -0
- data/lib/nokogiri/html5/node.rb +100 -0
- data/lib/nokogiri/html5.rb +478 -0
- data/lib/nokogiri/jruby/dependencies.rb +21 -0
- data/lib/nokogiri/syntax_error.rb +2 -0
- data/lib/nokogiri/version/constant.rb +6 -0
- data/lib/nokogiri/version/info.rb +222 -0
- data/lib/nokogiri/version.rb +3 -108
- data/lib/nokogiri/xml/attr.rb +6 -3
- data/lib/nokogiri/xml/attribute_decl.rb +3 -1
- data/lib/nokogiri/xml/builder.rb +97 -53
- data/lib/nokogiri/xml/cdata.rb +3 -1
- data/lib/nokogiri/xml/character_data.rb +2 -0
- data/lib/nokogiri/xml/document.rb +224 -86
- data/lib/nokogiri/xml/document_fragment.rb +57 -44
- data/lib/nokogiri/xml/dtd.rb +4 -2
- data/lib/nokogiri/xml/element_content.rb +2 -0
- data/lib/nokogiri/xml/element_decl.rb +3 -1
- data/lib/nokogiri/xml/entity_decl.rb +4 -2
- data/lib/nokogiri/xml/entity_reference.rb +2 -0
- data/lib/nokogiri/xml/namespace.rb +3 -0
- data/lib/nokogiri/xml/node/save_options.rb +10 -5
- data/lib/nokogiri/xml/node.rb +895 -377
- data/lib/nokogiri/xml/node_set.rb +92 -65
- data/lib/nokogiri/xml/notation.rb +13 -0
- data/lib/nokogiri/xml/parse_options.rb +22 -8
- data/lib/nokogiri/xml/pp/character_data.rb +9 -6
- data/lib/nokogiri/xml/pp/node.rb +25 -26
- data/lib/nokogiri/xml/pp.rb +4 -2
- data/lib/nokogiri/xml/processing_instruction.rb +3 -1
- data/lib/nokogiri/xml/reader.rb +21 -28
- data/lib/nokogiri/xml/relax_ng.rb +8 -2
- data/lib/nokogiri/xml/sax/document.rb +45 -49
- data/lib/nokogiri/xml/sax/parser.rb +38 -34
- data/lib/nokogiri/xml/sax/parser_context.rb +8 -3
- data/lib/nokogiri/xml/sax/push_parser.rb +6 -5
- data/lib/nokogiri/xml/sax.rb +6 -4
- data/lib/nokogiri/xml/schema.rb +19 -9
- data/lib/nokogiri/xml/searchable.rb +112 -72
- data/lib/nokogiri/xml/syntax_error.rb +6 -4
- data/lib/nokogiri/xml/text.rb +2 -0
- data/lib/nokogiri/xml/xpath/syntax_error.rb +4 -2
- data/lib/nokogiri/xml/xpath.rb +15 -4
- data/lib/nokogiri/xml/xpath_context.rb +3 -3
- data/lib/nokogiri/xml.rb +38 -37
- data/lib/nokogiri/xslt/stylesheet.rb +3 -1
- data/lib/nokogiri/xslt.rb +29 -20
- data/lib/nokogiri.rb +49 -65
- data/lib/xsd/xmlparser/nokogiri.rb +26 -24
- data/patches/libxml2/0001-Remove-script-macro-support.patch +40 -0
- data/patches/libxml2/0002-Update-entities-to-remove-handling-of-ssi.patch +44 -0
- data/patches/libxml2/0003-libxml2.la-is-in-top_builddir.patch +25 -0
- data/patches/libxml2/0005-avoid-isnan-isinf.patch +81 -0
- data/patches/libxml2/0009-allow-wildcard-namespaces.patch +77 -0
- data/patches/libxslt/0001-update-automake-files-for-arm64.patch +3037 -0
- data/ports/archives/libxml2-2.10.3.tar.xz +0 -0
- data/ports/archives/libxslt-1.1.37.tar.xz +0 -0
- metadata +211 -266
- data/.autotest +0 -22
- data/.cross_rubies +0 -8
- data/.editorconfig +0 -17
- data/.gemtest +0 -0
- data/.travis.yml +0 -63
- data/CHANGELOG.md +0 -1368
- data/CONTRIBUTING.md +0 -42
- data/C_CODING_STYLE.rdoc +0 -33
- data/Gemfile-libxml-ruby +0 -3
- data/Manifest.txt +0 -370
- data/ROADMAP.md +0 -111
- data/Rakefile +0 -348
- data/SECURITY.md +0 -19
- data/STANDARD_RESPONSES.md +0 -47
- data/Y_U_NO_GEMSPEC.md +0 -155
- data/appveyor.yml +0 -29
- data/build_all +0 -44
- data/ext/nokogiri/html_document.c +0 -170
- data/ext/nokogiri/html_document.h +0 -10
- data/ext/nokogiri/html_element_description.c +0 -279
- data/ext/nokogiri/html_element_description.h +0 -10
- data/ext/nokogiri/html_entity_lookup.c +0 -32
- data/ext/nokogiri/html_entity_lookup.h +0 -8
- data/ext/nokogiri/html_sax_parser_context.c +0 -116
- data/ext/nokogiri/html_sax_parser_context.h +0 -11
- data/ext/nokogiri/html_sax_push_parser.c +0 -87
- data/ext/nokogiri/html_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_attr.h +0 -9
- data/ext/nokogiri/xml_attribute_decl.h +0 -9
- data/ext/nokogiri/xml_cdata.h +0 -9
- data/ext/nokogiri/xml_comment.h +0 -9
- data/ext/nokogiri/xml_document.h +0 -23
- data/ext/nokogiri/xml_document_fragment.h +0 -10
- data/ext/nokogiri/xml_dtd.h +0 -10
- data/ext/nokogiri/xml_element_content.h +0 -10
- data/ext/nokogiri/xml_element_decl.h +0 -9
- data/ext/nokogiri/xml_encoding_handler.h +0 -8
- data/ext/nokogiri/xml_entity_decl.h +0 -10
- data/ext/nokogiri/xml_entity_reference.h +0 -9
- data/ext/nokogiri/xml_io.c +0 -61
- data/ext/nokogiri/xml_io.h +0 -11
- data/ext/nokogiri/xml_libxml2_hacks.c +0 -112
- data/ext/nokogiri/xml_libxml2_hacks.h +0 -12
- data/ext/nokogiri/xml_namespace.h +0 -15
- data/ext/nokogiri/xml_node.h +0 -13
- data/ext/nokogiri/xml_node_set.h +0 -12
- data/ext/nokogiri/xml_processing_instruction.h +0 -9
- data/ext/nokogiri/xml_reader.h +0 -10
- data/ext/nokogiri/xml_relax_ng.h +0 -9
- data/ext/nokogiri/xml_sax_parser.h +0 -39
- data/ext/nokogiri/xml_sax_parser_context.h +0 -10
- data/ext/nokogiri/xml_sax_push_parser.h +0 -9
- data/ext/nokogiri/xml_schema.h +0 -9
- data/ext/nokogiri/xml_syntax_error.h +0 -13
- data/ext/nokogiri/xml_text.h +0 -9
- data/ext/nokogiri/xml_xpath_context.h +0 -10
- data/ext/nokogiri/xslt_stylesheet.h +0 -14
- data/lib/nokogiri/html/document_fragment.rb +0 -49
- data/lib/nokogiri/html/element_description_defaults.rb +0 -671
- data/lib/nokogiri/html/sax/parser_context.rb +0 -16
- data/patches/libxml2/0001-Revert-Do-not-URI-escape-in-server-side-includes.patch +0 -78
- data/patches/libxml2/0002-Fix-nullptr-deref-with-XPath-logic-ops.patch +0 -54
- data/patches/libxml2/0003-Fix-infinite-loop-in-LZMA-decompression.patch +0 -50
- data/patches/sort-patches-by-date +0 -25
- data/ports/archives/libxml2-2.9.8.tar.gz +0 -0
- data/ports/archives/libxslt-1.1.32.tar.gz +0 -0
- data/suppressions/README.txt +0 -1
- data/suppressions/nokogiri_ruby-2.supp +0 -10
- data/tasks/test.rb +0 -100
- data/test/css/test_nthiness.rb +0 -226
- data/test/css/test_parser.rb +0 -386
- data/test/css/test_tokenizer.rb +0 -215
- data/test/css/test_xpath_visitor.rb +0 -96
- data/test/decorators/test_slop.rb +0 -23
- data/test/files/2ch.html +0 -108
- data/test/files/GH_1042.html +0 -18
- data/test/files/address_book.rlx +0 -12
- data/test/files/address_book.xml +0 -10
- data/test/files/atom.xml +0 -344
- data/test/files/bar/bar.xsd +0 -4
- data/test/files/bogus.xml +0 -0
- data/test/files/dont_hurt_em_why.xml +0 -422
- data/test/files/encoding.html +0 -82
- data/test/files/encoding.xhtml +0 -84
- data/test/files/exslt.xml +0 -8
- data/test/files/exslt.xslt +0 -35
- data/test/files/foo/foo.xsd +0 -4
- data/test/files/metacharset.html +0 -10
- data/test/files/namespace_pressure_test.xml +0 -1684
- data/test/files/noencoding.html +0 -47
- data/test/files/po.xml +0 -32
- data/test/files/po.xsd +0 -66
- data/test/files/saml/saml20assertion_schema.xsd +0 -283
- data/test/files/saml/saml20protocol_schema.xsd +0 -302
- data/test/files/saml/xenc_schema.xsd +0 -146
- data/test/files/saml/xmldsig_schema.xsd +0 -318
- data/test/files/shift_jis.html +0 -10
- data/test/files/shift_jis.xml +0 -5
- data/test/files/shift_jis_no_charset.html +0 -9
- data/test/files/slow-xpath.xml +0 -25509
- data/test/files/snuggles.xml +0 -3
- data/test/files/staff.dtd +0 -10
- data/test/files/staff.xml +0 -59
- data/test/files/staff.xslt +0 -32
- data/test/files/test_document_url/bar.xml +0 -2
- data/test/files/test_document_url/document.dtd +0 -4
- data/test/files/test_document_url/document.xml +0 -6
- data/test/files/tlm.html +0 -851
- data/test/files/to_be_xincluded.xml +0 -2
- data/test/files/valid_bar.xml +0 -2
- data/test/files/xinclude.xml +0 -4
- data/test/helper.rb +0 -271
- data/test/html/sax/test_parser.rb +0 -168
- data/test/html/sax/test_parser_context.rb +0 -46
- data/test/html/sax/test_parser_text.rb +0 -163
- data/test/html/sax/test_push_parser.rb +0 -87
- data/test/html/test_attributes.rb +0 -85
- data/test/html/test_builder.rb +0 -164
- data/test/html/test_document.rb +0 -712
- data/test/html/test_document_encoding.rb +0 -143
- data/test/html/test_document_fragment.rb +0 -310
- data/test/html/test_element_description.rb +0 -105
- data/test/html/test_named_characters.rb +0 -14
- data/test/html/test_node.rb +0 -212
- data/test/html/test_node_encoding.rb +0 -91
- data/test/namespaces/test_additional_namespaces_in_builder_doc.rb +0 -14
- data/test/namespaces/test_namespaces_aliased_default.rb +0 -24
- data/test/namespaces/test_namespaces_in_builder_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_cloned_doc.rb +0 -31
- data/test/namespaces/test_namespaces_in_created_doc.rb +0 -75
- data/test/namespaces/test_namespaces_in_parsed_doc.rb +0 -80
- data/test/namespaces/test_namespaces_preservation.rb +0 -31
- data/test/test_convert_xpath.rb +0 -135
- data/test/test_css_cache.rb +0 -47
- data/test/test_encoding_handler.rb +0 -48
- data/test/test_memory_leak.rb +0 -156
- data/test/test_nokogiri.rb +0 -138
- data/test/test_soap4r_sax.rb +0 -52
- data/test/test_xslt_transforms.rb +0 -314
- data/test/xml/node/test_save_options.rb +0 -28
- data/test/xml/node/test_subclass.rb +0 -44
- data/test/xml/sax/test_parser.rb +0 -402
- data/test/xml/sax/test_parser_context.rb +0 -115
- data/test/xml/sax/test_parser_text.rb +0 -202
- data/test/xml/sax/test_push_parser.rb +0 -265
- data/test/xml/test_attr.rb +0 -74
- data/test/xml/test_attribute_decl.rb +0 -86
- data/test/xml/test_builder.rb +0 -341
- data/test/xml/test_c14n.rb +0 -180
- data/test/xml/test_cdata.rb +0 -54
- data/test/xml/test_comment.rb +0 -40
- data/test/xml/test_document.rb +0 -982
- data/test/xml/test_document_encoding.rb +0 -31
- data/test/xml/test_document_fragment.rb +0 -298
- data/test/xml/test_dtd.rb +0 -187
- data/test/xml/test_dtd_encoding.rb +0 -31
- data/test/xml/test_element_content.rb +0 -56
- data/test/xml/test_element_decl.rb +0 -73
- data/test/xml/test_entity_decl.rb +0 -122
- data/test/xml/test_entity_reference.rb +0 -262
- data/test/xml/test_namespace.rb +0 -96
- data/test/xml/test_node.rb +0 -1325
- data/test/xml/test_node_attributes.rb +0 -115
- data/test/xml/test_node_encoding.rb +0 -75
- data/test/xml/test_node_inheritance.rb +0 -32
- data/test/xml/test_node_reparenting.rb +0 -592
- data/test/xml/test_node_set.rb +0 -809
- data/test/xml/test_parse_options.rb +0 -64
- data/test/xml/test_processing_instruction.rb +0 -30
- data/test/xml/test_reader.rb +0 -620
- data/test/xml/test_reader_encoding.rb +0 -134
- data/test/xml/test_relax_ng.rb +0 -60
- data/test/xml/test_schema.rb +0 -142
- data/test/xml/test_syntax_error.rb +0 -36
- data/test/xml/test_text.rb +0 -60
- data/test/xml/test_unparented_node.rb +0 -483
- data/test/xml/test_xinclude.rb +0 -83
- data/test/xml/test_xpath.rb +0 -470
- data/test/xslt/test_custom_functions.rb +0 -133
- data/test/xslt/test_exception_handling.rb +0 -37
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
####
|
@@ -11,10 +13,10 @@ module Nokogiri
|
|
11
13
|
# The Document this NodeSet is associated with
|
12
14
|
attr_accessor :document
|
13
15
|
|
14
|
-
|
16
|
+
alias_method :clone, :dup
|
15
17
|
|
16
18
|
# Create a NodeSet with +document+ defaulting to +list+
|
17
|
-
def initialize
|
19
|
+
def initialize(document, list = [])
|
18
20
|
@document = document
|
19
21
|
document.decorate(self)
|
20
22
|
list.each { |x| self << x }
|
@@ -23,8 +25,9 @@ module Nokogiri
|
|
23
25
|
|
24
26
|
###
|
25
27
|
# Get the first element of the NodeSet.
|
26
|
-
def first
|
28
|
+
def first(n = nil)
|
27
29
|
return self[0] unless n
|
30
|
+
|
28
31
|
list = []
|
29
32
|
[n, length].min.times { |i| list << self[i] }
|
30
33
|
list
|
@@ -44,9 +47,9 @@ module Nokogiri
|
|
44
47
|
|
45
48
|
###
|
46
49
|
# Returns the index of the first node in self that is == to +node+ or meets the given block. Returns nil if no match is found.
|
47
|
-
def index(node = nil
|
50
|
+
def index(node = nil)
|
48
51
|
if node
|
49
|
-
warn
|
52
|
+
warn("given block not used") if block_given?
|
50
53
|
each_with_index { |member, j| return j if member == node }
|
51
54
|
elsif block_given?
|
52
55
|
each_with_index { |member, j| return j if yield(member) }
|
@@ -56,18 +59,18 @@ module Nokogiri
|
|
56
59
|
|
57
60
|
###
|
58
61
|
# Insert +datum+ before the first Node in this NodeSet
|
59
|
-
def before
|
60
|
-
first.before
|
62
|
+
def before(datum)
|
63
|
+
first.before(datum)
|
61
64
|
end
|
62
65
|
|
63
66
|
###
|
64
67
|
# Insert +datum+ after the last Node in this NodeSet
|
65
|
-
def after
|
66
|
-
last.after
|
68
|
+
def after(datum)
|
69
|
+
last.after(datum)
|
67
70
|
end
|
68
71
|
|
69
|
-
|
70
|
-
|
72
|
+
alias_method :<<, :push
|
73
|
+
alias_method :remove, :unlink
|
71
74
|
|
72
75
|
###
|
73
76
|
# call-seq: css *rules, [namespace-bindings, custom-pseudo-class]
|
@@ -76,7 +79,7 @@ module Nokogiri
|
|
76
79
|
# selectors. For example:
|
77
80
|
#
|
78
81
|
# For more information see Nokogiri::XML::Searchable#css
|
79
|
-
def css
|
82
|
+
def css(*args)
|
80
83
|
rules, handler, ns, _ = extract_params(args)
|
81
84
|
paths = css_rules_to_xpath(rules, ns)
|
82
85
|
|
@@ -92,7 +95,7 @@ module Nokogiri
|
|
92
95
|
# queries.
|
93
96
|
#
|
94
97
|
# For more information see Nokogiri::XML::Searchable#xpath
|
95
|
-
def xpath
|
98
|
+
def xpath(*args)
|
96
99
|
paths, handler, ns, binds = extract_params(args)
|
97
100
|
|
98
101
|
inject(NodeSet.new(document)) do |set, node|
|
@@ -100,13 +103,6 @@ module Nokogiri
|
|
100
103
|
end
|
101
104
|
end
|
102
105
|
|
103
|
-
###
|
104
|
-
# Search this NodeSet's nodes' immediate children using CSS selector +selector+
|
105
|
-
def > selector
|
106
|
-
ns = document.root.namespaces
|
107
|
-
xpath CSS.xpath_for(selector, :prefix => "./", :ns => ns).first
|
108
|
-
end
|
109
|
-
|
110
106
|
###
|
111
107
|
# call-seq: search *paths, [namespace-bindings, xpath-variable-bindings, custom-handler-class]
|
112
108
|
#
|
@@ -119,18 +115,18 @@ module Nokogiri
|
|
119
115
|
#
|
120
116
|
# node_set.at(3) # same as node_set[3]
|
121
117
|
#
|
122
|
-
def at
|
118
|
+
def at(*args)
|
123
119
|
if args.length == 1 && args.first.is_a?(Numeric)
|
124
120
|
return self[args.first]
|
125
121
|
end
|
126
122
|
|
127
123
|
super(*args)
|
128
124
|
end
|
129
|
-
|
125
|
+
alias_method :%, :at
|
130
126
|
|
131
127
|
###
|
132
128
|
# Filter this list for nodes that match +expr+
|
133
|
-
def filter
|
129
|
+
def filter(expr)
|
134
130
|
find_all { |node| node.matches?(expr) }
|
135
131
|
end
|
136
132
|
|
@@ -139,7 +135,7 @@ module Nokogiri
|
|
139
135
|
# NodeSet.
|
140
136
|
#
|
141
137
|
# See Nokogiri::XML::Node#add_class for more information.
|
142
|
-
def add_class
|
138
|
+
def add_class(name)
|
143
139
|
each do |el|
|
144
140
|
el.add_class(name)
|
145
141
|
end
|
@@ -151,7 +147,7 @@ module Nokogiri
|
|
151
147
|
# NodeSet.
|
152
148
|
#
|
153
149
|
# See Nokogiri::XML::Node#append_class for more information.
|
154
|
-
def append_class
|
150
|
+
def append_class(name)
|
155
151
|
each do |el|
|
156
152
|
el.append_class(name)
|
157
153
|
end
|
@@ -163,7 +159,7 @@ module Nokogiri
|
|
163
159
|
# NodeSet.
|
164
160
|
#
|
165
161
|
# See Nokogiri::XML::Node#remove_class for more information.
|
166
|
-
def remove_class
|
162
|
+
def remove_class(name = nil)
|
167
163
|
each do |el|
|
168
164
|
el.remove_class(name)
|
169
165
|
end
|
@@ -171,38 +167,73 @@ module Nokogiri
|
|
171
167
|
end
|
172
168
|
|
173
169
|
###
|
174
|
-
# Set
|
175
|
-
#
|
176
|
-
|
177
|
-
|
178
|
-
|
170
|
+
# Set attributes on each Node in the NodeSet, or get an
|
171
|
+
# attribute from the first Node in the NodeSet.
|
172
|
+
#
|
173
|
+
# To get an attribute from the first Node in a NodeSet:
|
174
|
+
#
|
175
|
+
# node_set.attr("href") # => "https://www.nokogiri.org"
|
176
|
+
#
|
177
|
+
# Note that an empty NodeSet will return nil when +#attr+ is called as a getter.
|
178
|
+
#
|
179
|
+
# To set an attribute on each node, +key+ can either be an
|
180
|
+
# attribute name, or a Hash of attribute names and values. When
|
181
|
+
# called as a setter, +#attr+ returns the NodeSet.
|
182
|
+
#
|
183
|
+
# If +key+ is an attribute name, then either +value+ or +block+
|
184
|
+
# must be passed.
|
185
|
+
#
|
186
|
+
# If +key+ is a Hash then attributes will be set for each
|
187
|
+
# key/value pair:
|
188
|
+
#
|
189
|
+
# node_set.attr("href" => "https://www.nokogiri.org", "class" => "member")
|
190
|
+
#
|
191
|
+
# If +value+ is passed, it will be used as the attribute value
|
192
|
+
# for all nodes:
|
193
|
+
#
|
194
|
+
# node_set.attr("href", "https://www.nokogiri.org")
|
195
|
+
#
|
196
|
+
# If +block+ is passed, it will be called on each Node object in
|
197
|
+
# the NodeSet and the return value used as the attribute value
|
198
|
+
# for that node:
|
199
|
+
#
|
200
|
+
# node_set.attr("class") { |node| node.name }
|
201
|
+
#
|
202
|
+
def attr(key, value = nil, &block)
|
203
|
+
unless key.is_a?(Hash) || (key && (value || block))
|
204
|
+
return first ? first.attribute(key) : nil
|
179
205
|
end
|
180
206
|
|
181
207
|
hash = key.is_a?(Hash) ? key : { key => value }
|
182
208
|
|
183
|
-
hash.each
|
209
|
+
hash.each do |k, v|
|
210
|
+
each do |node|
|
211
|
+
node[k] = v || yield(node)
|
212
|
+
end
|
213
|
+
end
|
184
214
|
|
185
215
|
self
|
186
216
|
end
|
187
|
-
|
188
|
-
|
217
|
+
alias_method :set, :attr
|
218
|
+
alias_method :attribute, :attr
|
189
219
|
|
190
220
|
###
|
191
221
|
# Remove the attributed named +name+ from all Node objects in the NodeSet
|
192
|
-
def remove_attr
|
193
|
-
each { |el| el.delete
|
222
|
+
def remove_attr(name)
|
223
|
+
each { |el| el.delete(name) }
|
194
224
|
self
|
195
225
|
end
|
196
|
-
|
226
|
+
alias_method :remove_attribute, :remove_attr
|
197
227
|
|
198
228
|
###
|
199
229
|
# Iterate over each node, yielding to +block+
|
200
|
-
def each
|
230
|
+
def each
|
201
231
|
return to_enum unless block_given?
|
202
232
|
|
203
233
|
0.upto(length - 1) do |x|
|
204
234
|
yield self[x]
|
205
235
|
end
|
236
|
+
self
|
206
237
|
end
|
207
238
|
|
208
239
|
###
|
@@ -219,25 +250,20 @@ module Nokogiri
|
|
219
250
|
#
|
220
251
|
# See Nokogiri::XML::Node#content for more information.
|
221
252
|
def inner_text
|
222
|
-
collect(&:inner_text).join(
|
253
|
+
collect(&:inner_text).join("")
|
223
254
|
end
|
224
|
-
|
255
|
+
alias_method :text, :inner_text
|
225
256
|
|
226
257
|
###
|
227
258
|
# Get the inner html of all contained Node objects
|
228
|
-
def inner_html
|
229
|
-
collect{|j| j.inner_html(*args) }.join(
|
259
|
+
def inner_html(*args)
|
260
|
+
collect { |j| j.inner_html(*args) }.join("")
|
230
261
|
end
|
231
262
|
|
232
263
|
###
|
233
|
-
# Wrap this NodeSet with +html+
|
234
|
-
def wrap(html
|
235
|
-
|
236
|
-
new_parent = document.parse(html).first
|
237
|
-
j.add_next_sibling(new_parent)
|
238
|
-
new_parent.add_child(j)
|
239
|
-
end
|
240
|
-
self
|
264
|
+
# Wrap this NodeSet with +html+
|
265
|
+
def wrap(html)
|
266
|
+
map { |node| node.wrap(html) }
|
241
267
|
end
|
242
268
|
|
243
269
|
###
|
@@ -248,10 +274,10 @@ module Nokogiri
|
|
248
274
|
|
249
275
|
###
|
250
276
|
# Convert this NodeSet to HTML
|
251
|
-
def to_html
|
277
|
+
def to_html(*args)
|
252
278
|
if Nokogiri.jruby?
|
253
279
|
options = args.first.is_a?(Hash) ? args.shift : {}
|
254
|
-
|
280
|
+
unless options[:save_with]
|
255
281
|
options[:save_with] = Node::SaveOptions::NO_DECLARATION | Node::SaveOptions::NO_EMPTY_TAGS | Node::SaveOptions::AS_HTML
|
256
282
|
end
|
257
283
|
args.insert(0, options)
|
@@ -261,25 +287,26 @@ module Nokogiri
|
|
261
287
|
|
262
288
|
###
|
263
289
|
# Convert this NodeSet to XHTML
|
264
|
-
def to_xhtml
|
290
|
+
def to_xhtml(*args)
|
265
291
|
map { |x| x.to_xhtml(*args) }.join
|
266
292
|
end
|
267
293
|
|
268
294
|
###
|
269
295
|
# Convert this NodeSet to XML
|
270
|
-
def to_xml
|
296
|
+
def to_xml(*args)
|
271
297
|
map { |x| x.to_xml(*args) }.join
|
272
298
|
end
|
273
299
|
|
274
|
-
|
275
|
-
|
300
|
+
alias_method :size, :length
|
301
|
+
alias_method :to_ary, :to_a
|
276
302
|
|
277
303
|
###
|
278
304
|
# Removes the last element from set and returns it, or +nil+ if
|
279
305
|
# the set is empty
|
280
306
|
def pop
|
281
307
|
return nil if length == 0
|
282
|
-
|
308
|
+
|
309
|
+
delete(last)
|
283
310
|
end
|
284
311
|
|
285
312
|
###
|
@@ -287,16 +314,18 @@ module Nokogiri
|
|
287
314
|
# +nil+ if the set is empty.
|
288
315
|
def shift
|
289
316
|
return nil if length == 0
|
290
|
-
|
317
|
+
|
318
|
+
delete(first)
|
291
319
|
end
|
292
320
|
|
293
321
|
###
|
294
322
|
# Equality -- Two NodeSets are equal if the contain the same number
|
295
323
|
# of elements and if each element is equal to the corresponding
|
296
324
|
# element in the other NodeSet
|
297
|
-
def ==
|
325
|
+
def ==(other)
|
298
326
|
return false unless other.is_a?(Nokogiri::XML::NodeSet)
|
299
327
|
return false unless length == other.length
|
328
|
+
|
300
329
|
each_with_index do |node, i|
|
301
330
|
return false unless node == other[i]
|
302
331
|
end
|
@@ -320,7 +349,7 @@ module Nokogiri
|
|
320
349
|
def reverse
|
321
350
|
node_set = NodeSet.new(document)
|
322
351
|
(length - 1).downto(0) do |x|
|
323
|
-
node_set.push
|
352
|
+
node_set.push(self[x])
|
324
353
|
end
|
325
354
|
node_set
|
326
355
|
end
|
@@ -328,14 +357,12 @@ module Nokogiri
|
|
328
357
|
###
|
329
358
|
# Return a nicely formated string representation
|
330
359
|
def inspect
|
331
|
-
"[#{map(&:inspect).join
|
360
|
+
"[#{map(&:inspect).join(", ")}]"
|
332
361
|
end
|
333
362
|
|
334
|
-
|
335
|
-
|
336
|
-
# @private
|
337
|
-
IMPLIED_XPATH_CONTEXTS = [ './/'.freeze, 'self::'.freeze ].freeze # :nodoc:
|
363
|
+
alias_method :+, :|
|
338
364
|
|
365
|
+
IMPLIED_XPATH_CONTEXTS = [".//", "self::"].freeze # :nodoc:
|
339
366
|
end
|
340
367
|
end
|
341
368
|
end
|
@@ -1,6 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
5
|
+
# Struct representing an {XML Schema Notation}[https://www.w3.org/TR/xml/#Notations]
|
3
6
|
class Notation < Struct.new(:name, :public_id, :system_id)
|
7
|
+
# dead comment to ensure rdoc processing
|
8
|
+
|
9
|
+
# :attr: name (String)
|
10
|
+
# The name for the element.
|
11
|
+
|
12
|
+
# :attr: public_id (String)
|
13
|
+
# The URI corresponding to the public identifier
|
14
|
+
|
15
|
+
# :attr: system_id (String,nil)
|
16
|
+
# The URI corresponding to the system identifier
|
4
17
|
end
|
5
18
|
end
|
6
19
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
###
|
@@ -5,11 +7,11 @@ module Nokogiri
|
|
5
7
|
#
|
6
8
|
# == Building combinations of parse options
|
7
9
|
# You can build your own combinations of these parse options by using any of the following methods:
|
8
|
-
# *Note*: All examples attempt to set the +RECOVER+ & +NOENT+ options.
|
10
|
+
# *Note*: All examples attempt to set the +RECOVER+ & +NOENT+ options.
|
9
11
|
# [Ruby's bitwise operators] You can use the Ruby bitwise operators to set various combinations.
|
10
|
-
# Nokogiri.XML('<content>Chapter 1</content',
|
12
|
+
# Nokogiri.XML('<content>Chapter 1</content', nil, nil, Nokogiri::XML::ParseOptions.new((1 << 0) | (1 << 1)))
|
11
13
|
# [Method chaining] Every option has an equivalent method in lowercase. You can chain these methods together to set various combinations.
|
12
|
-
# Nokogiri.XML('<content>Chapter 1</content',
|
14
|
+
# Nokogiri.XML('<content>Chapter 1</content', nil, nil, Nokogiri::XML::ParseOptions.new.recover.noent)
|
13
15
|
# [Using Ruby Blocks] You can also setup parse combinations in the block passed to Nokogiri.XML or Nokogiri.HTML
|
14
16
|
# Nokogiri.XML('<content>Chapter 1</content') {|config| config.recover.noent}
|
15
17
|
#
|
@@ -67,19 +69,27 @@ module Nokogiri
|
|
67
69
|
NOBASEFIX = 1 << 18
|
68
70
|
# relax any hardcoded limit from the parser
|
69
71
|
HUGE = 1 << 19
|
72
|
+
# line numbers stored as long int (instead of a short int)
|
73
|
+
BIG_LINES = 1 << 22
|
70
74
|
|
71
75
|
# the default options used for parsing XML documents
|
72
|
-
DEFAULT_XML = RECOVER | NONET
|
76
|
+
DEFAULT_XML = RECOVER | NONET | BIG_LINES
|
77
|
+
# the default options used for parsing XSLT stylesheets
|
78
|
+
DEFAULT_XSLT = RECOVER | NONET | NOENT | DTDLOAD | DTDATTR | NOCDATA | BIG_LINES
|
73
79
|
# the default options used for parsing HTML documents
|
74
|
-
DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET
|
80
|
+
DEFAULT_HTML = RECOVER | NOERROR | NOWARNING | NONET | BIG_LINES
|
81
|
+
# the default options used for parsing XML schemas
|
82
|
+
DEFAULT_SCHEMA = NONET | BIG_LINES
|
75
83
|
|
76
84
|
attr_accessor :options
|
77
|
-
|
85
|
+
|
86
|
+
def initialize(options = STRICT)
|
78
87
|
@options = options
|
79
88
|
end
|
80
89
|
|
81
90
|
constants.each do |constant|
|
82
91
|
next if constant.to_sym == :STRICT
|
92
|
+
|
83
93
|
class_eval %{
|
84
94
|
def #{constant.downcase}
|
85
95
|
@options |= #{constant}
|
@@ -106,14 +116,18 @@ module Nokogiri
|
|
106
116
|
@options & RECOVER == STRICT
|
107
117
|
end
|
108
118
|
|
109
|
-
|
119
|
+
def ==(other)
|
120
|
+
other.to_i == to_i
|
121
|
+
end
|
122
|
+
|
123
|
+
alias_method :to_i, :options
|
110
124
|
|
111
125
|
def inspect
|
112
126
|
options = []
|
113
127
|
self.class.constants.each do |k|
|
114
128
|
options << k.downcase if send(:"#{k.downcase}?")
|
115
129
|
end
|
116
|
-
super.sub(/>$/, " " + options.join(
|
130
|
+
super.sub(/>$/, " " + options.join(", ") + ">")
|
117
131
|
end
|
118
132
|
end
|
119
133
|
end
|
@@ -1,16 +1,19 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
5
|
+
# :nodoc: all
|
3
6
|
module PP
|
4
7
|
module CharacterData
|
5
|
-
def pretty_print
|
6
|
-
nice_name = self.class.name.split(
|
7
|
-
pp.group(2, "#(#{nice_name} ",
|
8
|
-
pp.pp
|
8
|
+
def pretty_print(pp)
|
9
|
+
nice_name = self.class.name.split("::").last
|
10
|
+
pp.group(2, "#(#{nice_name} ", ")") do
|
11
|
+
pp.pp(text)
|
9
12
|
end
|
10
13
|
end
|
11
14
|
|
12
|
-
def inspect
|
13
|
-
"#<#{self.class.name}:#{
|
15
|
+
def inspect
|
16
|
+
"#<#{self.class.name}:#{format("0x%x", object_id)} #{text.inspect}>"
|
14
17
|
end
|
15
18
|
end
|
16
19
|
end
|
data/lib/nokogiri/xml/pp/node.rb
CHANGED
@@ -1,53 +1,52 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
5
|
+
# :nodoc: all
|
3
6
|
module PP
|
4
7
|
module Node
|
5
|
-
def inspect
|
6
|
-
attributes = inspect_attributes.reject
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
}.join ' '
|
16
|
-
"#<#{self.class.name}:#{sprintf("0x%x", object_id)} #{attributes}>"
|
8
|
+
def inspect
|
9
|
+
attributes = inspect_attributes.reject do |x|
|
10
|
+
attribute = send(x)
|
11
|
+
!attribute || (attribute.respond_to?(:empty?) && attribute.empty?)
|
12
|
+
rescue NoMethodError
|
13
|
+
true
|
14
|
+
end.map do |attribute|
|
15
|
+
"#{attribute.to_s.sub(/_\w+/, "s")}=#{send(attribute).inspect}"
|
16
|
+
end.join(" ")
|
17
|
+
"#<#{self.class.name}:#{format("0x%x", object_id)} #{attributes}>"
|
17
18
|
end
|
18
19
|
|
19
|
-
def pretty_print
|
20
|
-
nice_name = self.class.name.split(
|
21
|
-
pp.group(2, "#(#{nice_name}:#{
|
22
|
-
|
20
|
+
def pretty_print(pp)
|
21
|
+
nice_name = self.class.name.split("::").last
|
22
|
+
pp.group(2, "#(#{nice_name}:#{format("0x%x", object_id)} {", "})") do
|
23
23
|
pp.breakable
|
24
|
-
attrs = inspect_attributes.map
|
24
|
+
attrs = inspect_attributes.map do |t|
|
25
25
|
[t, send(t)] if respond_to?(t)
|
26
|
-
|
26
|
+
end.compact.find_all do |x|
|
27
27
|
if x.last
|
28
|
-
if [:attribute_nodes, :children].include?
|
28
|
+
if [:attribute_nodes, :children].include?(x.first)
|
29
29
|
!x.last.empty?
|
30
30
|
else
|
31
31
|
true
|
32
32
|
end
|
33
33
|
end
|
34
|
-
|
34
|
+
end
|
35
35
|
|
36
36
|
pp.seplist(attrs) do |v|
|
37
|
-
if [:attribute_nodes, :children].include?
|
38
|
-
pp.group(2, "#{v.first.to_s.sub(/_\w+$/,
|
37
|
+
if [:attribute_nodes, :children].include?(v.first)
|
38
|
+
pp.group(2, "#{v.first.to_s.sub(/_\w+$/, "s")} = [", "]") do
|
39
39
|
pp.breakable
|
40
40
|
pp.seplist(v.last) do |item|
|
41
|
-
pp.pp
|
41
|
+
pp.pp(item)
|
42
42
|
end
|
43
43
|
end
|
44
44
|
else
|
45
|
-
pp.text
|
46
|
-
pp.pp
|
45
|
+
pp.text("#{v.first} = ")
|
46
|
+
pp.pp(v.last)
|
47
47
|
end
|
48
48
|
end
|
49
49
|
pp.breakable
|
50
|
-
|
51
50
|
end
|
52
51
|
end
|
53
52
|
end
|
data/lib/nokogiri/xml/pp.rb
CHANGED
data/lib/nokogiri/xml/reader.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
###
|
@@ -7,18 +9,18 @@ module Nokogiri
|
|
7
9
|
#
|
8
10
|
# Here is an example of usage:
|
9
11
|
#
|
10
|
-
#
|
11
|
-
#
|
12
|
-
#
|
13
|
-
#
|
14
|
-
#
|
12
|
+
# reader = Nokogiri::XML::Reader(<<-eoxml)
|
13
|
+
# <x xmlns:tenderlove='http://tenderlovemaking.com/'>
|
14
|
+
# <tenderlove:foo awesome='true'>snuggles!</tenderlove:foo>
|
15
|
+
# </x>
|
16
|
+
# eoxml
|
15
17
|
#
|
16
|
-
#
|
18
|
+
# reader.each do |node|
|
17
19
|
#
|
18
|
-
#
|
19
|
-
#
|
20
|
+
# # node is an instance of Nokogiri::XML::Reader
|
21
|
+
# puts node.name
|
20
22
|
#
|
21
|
-
#
|
23
|
+
# end
|
22
24
|
#
|
23
25
|
# Note that Nokogiri::XML::Reader#each can only be called once!! Once
|
24
26
|
# the cursor moves through the entire document, you must parse the
|
@@ -69,41 +71,32 @@ module Nokogiri
|
|
69
71
|
# A list of errors encountered while parsing
|
70
72
|
attr_accessor :errors
|
71
73
|
|
72
|
-
# The encoding for the document
|
73
|
-
attr_reader :encoding
|
74
|
-
|
75
74
|
# The XML source
|
76
75
|
attr_reader :source
|
77
76
|
|
78
|
-
|
77
|
+
alias_method :self_closing?, :empty_element?
|
79
78
|
|
80
|
-
def initialize
|
79
|
+
def initialize(source, url = nil, encoding = nil) # :nodoc:
|
81
80
|
@source = source
|
82
81
|
@errors = []
|
83
82
|
@encoding = encoding
|
84
83
|
end
|
85
84
|
private :initialize
|
86
85
|
|
87
|
-
|
88
|
-
#
|
86
|
+
# Get the attributes and namespaces of the current node as a Hash.
|
87
|
+
#
|
88
|
+
# This is the union of Reader#attribute_hash and Reader#namespaces
|
89
|
+
#
|
90
|
+
# [Returns]
|
91
|
+
# (Hash<String, String>) Attribute names and values, and namespace prefixes and hrefs.
|
89
92
|
def attributes
|
90
|
-
|
91
|
-
[node.name, node.to_s]
|
92
|
-
}].merge(namespaces || {})
|
93
|
-
end
|
94
|
-
|
95
|
-
###
|
96
|
-
# Get a list of attributes for the current node
|
97
|
-
def attribute_nodes
|
98
|
-
nodes = attr_nodes
|
99
|
-
nodes.each { |v| v.instance_variable_set(:@_r, self) }
|
100
|
-
nodes
|
93
|
+
attribute_hash.merge(namespaces)
|
101
94
|
end
|
102
95
|
|
103
96
|
###
|
104
97
|
# Move the cursor through the document yielding the cursor to the block
|
105
98
|
def each
|
106
|
-
while cursor =
|
99
|
+
while (cursor = read)
|
107
100
|
yield cursor
|
108
101
|
end
|
109
102
|
end
|
@@ -1,11 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module Nokogiri
|
2
4
|
module XML
|
3
5
|
class << self
|
4
6
|
###
|
5
7
|
# Create a new Nokogiri::XML::RelaxNG document from +string_or_io+.
|
6
8
|
# See Nokogiri::XML::RelaxNG for an example.
|
7
|
-
def RelaxNG
|
8
|
-
RelaxNG.new(string_or_io)
|
9
|
+
def RelaxNG(string_or_io, options = ParseOptions::DEFAULT_SCHEMA)
|
10
|
+
RelaxNG.new(string_or_io, options)
|
9
11
|
end
|
10
12
|
end
|
11
13
|
|
@@ -26,6 +28,10 @@ module Nokogiri
|
|
26
28
|
# end
|
27
29
|
#
|
28
30
|
# The list of errors are Nokogiri::XML::SyntaxError objects.
|
31
|
+
#
|
32
|
+
# NOTE: RelaxNG input is always treated as TRUSTED documents, meaning that they will cause the
|
33
|
+
# underlying parsing libraries to access network resources. This is counter to Nokogiri's
|
34
|
+
# "untrusted by default" security policy, but is a limitation of the underlying libraries.
|
29
35
|
class RelaxNG < Nokogiri::XML::Schema
|
30
36
|
end
|
31
37
|
end
|