libxml-ruby 2.9.0 → 3.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/HISTORY +811 -790
- data/LICENSE +20 -20
- data/MANIFEST +166 -166
- data/README.rdoc +188 -184
- data/Rakefile +1 -1
- data/ext/libxml/libxml.c +80 -80
- data/ext/libxml/ruby_libxml.h +75 -75
- data/ext/libxml/ruby_xml.c +0 -84
- data/ext/libxml/ruby_xml.h +0 -10
- data/ext/libxml/ruby_xml_attr.h +12 -12
- data/ext/libxml/ruby_xml_attr_decl.c +153 -153
- data/ext/libxml/ruby_xml_attr_decl.h +11 -11
- data/ext/libxml/ruby_xml_attributes.c +275 -275
- data/ext/libxml/ruby_xml_attributes.h +15 -15
- data/ext/libxml/ruby_xml_document.c +21 -27
- data/ext/libxml/ruby_xml_document.h +11 -11
- data/ext/libxml/ruby_xml_dtd.c +2 -13
- data/ext/libxml/ruby_xml_dtd.h +9 -9
- data/ext/libxml/ruby_xml_error.c +996 -996
- data/ext/libxml/ruby_xml_error.h +12 -12
- data/ext/libxml/ruby_xml_html_parser.c +89 -92
- data/ext/libxml/ruby_xml_html_parser.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_context.h +10 -10
- data/ext/libxml/ruby_xml_html_parser_options.c +46 -46
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -10
- data/ext/libxml/ruby_xml_input_cbg.h +20 -20
- data/ext/libxml/ruby_xml_io.c +0 -1
- data/ext/libxml/ruby_xml_io.h +10 -10
- data/ext/libxml/ruby_xml_namespace.c +153 -153
- data/ext/libxml/ruby_xml_namespace.h +10 -10
- data/ext/libxml/ruby_xml_namespaces.c +293 -293
- data/ext/libxml/ruby_xml_namespaces.h +9 -9
- data/ext/libxml/ruby_xml_node.c +100 -143
- data/ext/libxml/ruby_xml_node.h +13 -11
- data/ext/libxml/ruby_xml_parser.c +91 -94
- data/ext/libxml/ruby_xml_parser.h +12 -12
- data/ext/libxml/ruby_xml_parser_context.h +10 -10
- data/ext/libxml/ruby_xml_parser_options.c +66 -66
- data/ext/libxml/ruby_xml_parser_options.h +12 -12
- data/ext/libxml/ruby_xml_reader.c +45 -37
- data/ext/libxml/ruby_xml_reader.h +17 -17
- data/ext/libxml/ruby_xml_relaxng.h +10 -10
- data/ext/libxml/ruby_xml_sax2_handler.c +3 -3
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -10
- data/ext/libxml/ruby_xml_sax_parser.c +116 -120
- data/ext/libxml/ruby_xml_sax_parser.h +10 -10
- data/ext/libxml/ruby_xml_schema.h +809 -809
- data/ext/libxml/ruby_xml_schema_attribute.c +109 -109
- data/ext/libxml/ruby_xml_schema_attribute.h +15 -15
- data/ext/libxml/ruby_xml_schema_element.c +94 -94
- data/ext/libxml/ruby_xml_schema_element.h +14 -14
- data/ext/libxml/ruby_xml_schema_facet.c +52 -52
- data/ext/libxml/ruby_xml_schema_facet.h +13 -13
- data/ext/libxml/ruby_xml_schema_type.c +259 -259
- data/ext/libxml/ruby_xml_schema_type.h +9 -9
- data/ext/libxml/ruby_xml_version.h +9 -9
- data/ext/libxml/ruby_xml_writer.c +1136 -1136
- data/ext/libxml/ruby_xml_writer.h +10 -10
- data/ext/libxml/ruby_xml_xinclude.c +16 -16
- data/ext/libxml/ruby_xml_xinclude.h +11 -11
- data/ext/libxml/ruby_xml_xpath.c +42 -36
- data/ext/libxml/ruby_xml_xpath.h +13 -13
- data/ext/libxml/ruby_xml_xpath_context.c +1 -1
- data/ext/libxml/ruby_xml_xpath_context.h +9 -9
- data/ext/libxml/ruby_xml_xpath_expression.c +81 -81
- data/ext/libxml/ruby_xml_xpath_expression.h +10 -10
- data/ext/libxml/ruby_xml_xpath_object.c +5 -2
- data/ext/libxml/ruby_xml_xpath_object.h +17 -17
- data/ext/libxml/ruby_xml_xpointer.c +99 -99
- data/ext/libxml/ruby_xml_xpointer.h +11 -11
- data/ext/vc/libxml_ruby.sln +17 -15
- data/lib/libxml.rb +1 -6
- data/lib/libxml/node.rb +2 -78
- data/lib/libxml/parser.rb +0 -266
- data/lib/libxml/sax_parser.rb +0 -17
- data/lib/libxml/schema.rb +66 -66
- data/lib/libxml/schema/attribute.rb +19 -19
- data/lib/libxml/schema/element.rb +27 -27
- data/lib/libxml/schema/type.rb +29 -29
- data/script/benchmark/depixelate +634 -634
- data/script/benchmark/hamlet.xml +9054 -9054
- data/script/benchmark/parsecount +170 -170
- data/script/benchmark/throughput +41 -41
- data/script/test +6 -6
- data/test/c14n/given/example-1.xml +14 -14
- data/test/c14n/given/example-2.xml +11 -11
- data/test/c14n/given/example-3.xml +18 -18
- data/test/c14n/given/example-4.xml +9 -9
- data/test/c14n/given/example-5.xml +12 -12
- data/test/c14n/given/example-6.xml +2 -2
- data/test/c14n/given/example-7.xml +11 -11
- data/test/c14n/given/example-8.xml +11 -11
- data/test/c14n/given/example-8.xpath +9 -9
- data/test/c14n/result/1-1-without-comments/example-1 +3 -3
- data/test/c14n/result/1-1-without-comments/example-2 +10 -10
- data/test/c14n/result/1-1-without-comments/example-3 +13 -13
- data/test/c14n/result/1-1-without-comments/example-4 +8 -8
- data/test/c14n/result/1-1-without-comments/example-5 +2 -2
- data/test/c14n/result/with-comments/example-1 +5 -5
- data/test/c14n/result/with-comments/example-2 +10 -10
- data/test/c14n/result/with-comments/example-3 +13 -13
- data/test/c14n/result/with-comments/example-4 +8 -8
- data/test/c14n/result/with-comments/example-5 +3 -3
- data/test/c14n/result/without-comments/example-1 +3 -3
- data/test/c14n/result/without-comments/example-2 +10 -10
- data/test/c14n/result/without-comments/example-3 +13 -13
- data/test/c14n/result/without-comments/example-4 +8 -8
- data/test/c14n/result/without-comments/example-5 +2 -2
- data/test/model/atom.xml +12 -12
- data/test/model/bands.iso-8859-1.xml +4 -4
- data/test/model/bands.utf-8.xml +4 -4
- data/test/model/bands.xml +4 -4
- data/test/model/books.xml +153 -153
- data/test/model/merge_bug_data.xml +58 -58
- data/test/model/ruby-lang.html +238 -238
- data/test/model/rubynet.xml +79 -79
- data/test/model/shiporder.rnc +28 -28
- data/test/model/shiporder.rng +86 -86
- data/test/model/shiporder.xml +22 -22
- data/test/model/shiporder.xsd +39 -39
- data/test/model/soap.xml +27 -27
- data/test/model/xinclude.xml +4 -4
- data/test/tc_attributes.rb +0 -6
- data/test/tc_error.rb +157 -158
- data/test/tc_node.rb +33 -17
- data/test/tc_node_edit.rb +0 -15
- data/test/tc_node_pi.rb +39 -39
- data/test/tc_parser.rb +0 -48
- data/test/tc_reader.rb +12 -53
- data/test/tc_writer.rb +447 -447
- data/test/tc_xpath.rb +1 -1
- data/test/test_helper.rb +2 -2
- metadata +3 -8
- data/ext/libxml/extconf.h +0 -4
- data/lib/libxml/ns.rb +0 -22
- data/lib/libxml/properties.rb +0 -23
- data/lib/libxml/reader.rb +0 -29
- data/lib/libxml/xpath_object.rb +0 -16
data/script/benchmark/parsecount
CHANGED
@@ -1,170 +1,170 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
#
|
3
|
-
# Each test has an XML Parser open a 98k XML document and count one type of leaf
|
4
|
-
# element (466 entries). This is repeated a total of 100 times, twice for each Parser.
|
5
|
-
# Summary measurements are from the second test.
|
6
|
-
#
|
7
|
-
# Tests run on a MacBook Pro, Mac OS X 10.5.5, 4GB memory, 2.5 GHz Intel Core 2 Duo.
|
8
|
-
#
|
9
|
-
# Library versions:
|
10
|
-
# hpricot 0.6.164
|
11
|
-
# libxml: 0.9.2
|
12
|
-
#
|
13
|
-
# All benchmarks were run twice in sequence and the measurements presented here are from
|
14
|
-
# the second run. Java automatically optimizes JRuby code which is run many times and the
|
15
|
-
# speedup from the first to the second test is from 40 to 75%. There is no essential
|
16
|
-
# difference in the speed of the C version of Ruby between the first test and the second.
|
17
|
-
#
|
18
|
-
# Summary:
|
19
|
-
#
|
20
|
-
# 100 times: Open 98k XML document and count one type of leaf element (466 entries)
|
21
|
-
#
|
22
|
-
# JRuby (Java 1.6.0_03-p3-Soylatte using server mode): jdom_document_builder 0.360
|
23
|
-
# MRI: libxml v0.9.2 0.383
|
24
|
-
# JRuby (Java 1.6.0_07): jdom_document_builder 0.401
|
25
|
-
# JRuby (Java 1.5.0_16): jdom_document_builder 0.428
|
26
|
-
# JRuby (Java 1.6.0_03-p3-Soylatte using server mode): hpricot 1.977
|
27
|
-
# JRuby (Java 1.5.0_16): hpricot 2.027
|
28
|
-
# JRuby (Java 1.6.0_07): hpricot 2.094
|
29
|
-
# MRI: hpricot 2.140
|
30
|
-
# JRuby (Java 1.6.0_03-p3-Soylatte using server mode): rexml 5.488
|
31
|
-
# JRuby (Java 1.5.0_16): rexml 5.569
|
32
|
-
# JRuby (Java 1.5.0_16): rexml 5.578
|
33
|
-
# MRI: rexml 8.606
|
34
|
-
#
|
35
|
-
# Ruby version: MRI 1.8.6 (2008-03-03 rev 114), platform: universal-darwin9.0
|
36
|
-
# --------------------------------------------------------------------------------
|
37
|
-
# user system total real
|
38
|
-
# rexml 8.170000 0.100000 8.270000 ( 8.606676)
|
39
|
-
# hpricot 1.990000 0.040000 2.030000 ( 2.140865)
|
40
|
-
# libxml 0.350000 0.020000 0.370000 ( 0.383475)
|
41
|
-
#
|
42
|
-
# JRuby 1.1.5 (svn r8078) on Java 1.5.0_16
|
43
|
-
# --------------------------------------------------------------------------------
|
44
|
-
# user system total real
|
45
|
-
# rexml 5.578000 0.000000 5.578000 ( 5.578371)
|
46
|
-
# hpricot 2.028000 0.000000 2.028000 ( 2.027348)
|
47
|
-
# jdom_document_builder 0.429000 0.000000 0.429000 ( 0.428713)
|
48
|
-
#
|
49
|
-
# JRuby 1.1.5 (svn r8078) on Java 1.6.0_07
|
50
|
-
# --------------------------------------------------------------------------------
|
51
|
-
# user system total real
|
52
|
-
# rexml 5.569000 0.000000 5.569000 ( 5.569135)
|
53
|
-
# hpricot 2.094000 0.000000 2.094000 ( 2.093635)
|
54
|
-
# jdom_document_builder 0.401000 0.000000 0.401000 ( 0.401115)
|
55
|
-
#
|
56
|
-
# JRuby 1.1.5 (svn r8078) on Java 1.6.0_07 using server mode (-J-server)
|
57
|
-
# --------------------------------------------------------------------------------
|
58
|
-
# user system total real
|
59
|
-
# rexml 5.489000 0.000000 5.489000 ( 5.488560)
|
60
|
-
# hpricot 1.977000 0.000000 1.977000 ( 1.976845)
|
61
|
-
# jdom_document_builder 0.377000 0.000000 0.377000 ( 0.377808)
|
62
|
-
#
|
63
|
-
# JRuby 1.1.5 (svn r8078) on Java 1.6.0_03-p3 (Soylatte) using server mode (-J-server)
|
64
|
-
# --------------------------------------------------------------------------------
|
65
|
-
# user system total real
|
66
|
-
# rexml 5.596000 0.000000 5.596000 ( 5.596212)
|
67
|
-
# hpricot 1.937000 0.000000 1.937000 ( 1.937312)
|
68
|
-
# jdom_document_builder 0.360000 0.000000 0.360000 ( 0.360068)
|
69
|
-
|
70
|
-
require 'rubygems'
|
71
|
-
require 'benchmark'
|
72
|
-
require "rexml/document"
|
73
|
-
require 'hpricot'
|
74
|
-
|
75
|
-
if RUBY_PLATFORM =~ /java/
|
76
|
-
include Java
|
77
|
-
import javax.xml.parsers.DocumentBuilder
|
78
|
-
import javax.xml.parsers.DocumentBuilderFactory
|
79
|
-
@dbf = DocumentBuilderFactory.new_instance
|
80
|
-
@ruby_info = "Ruby version: JRuby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL}) [i386-jruby#{JRUBY_VERSION}]"
|
81
|
-
@ruby_info << ", platform: Java, version #{java.lang.System.getProperty('java.version')}"
|
82
|
-
else
|
83
|
-
@ruby_info = "Ruby version: MRI #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL})"
|
84
|
-
@ruby_info << ", platform: #{RUBY_PLATFORM}"
|
85
|
-
|
86
|
-
gem 'nokogiri', '>= 1.0.6'
|
87
|
-
require 'nokogiri'
|
88
|
-
|
89
|
-
gem 'libxml-ruby', '>= 0.9.2'
|
90
|
-
require 'libxml'
|
91
|
-
@xml_parser = LibXML::XML::Parser.new
|
92
|
-
end
|
93
|
-
|
94
|
-
file = File.expand_path(File.join(File.dirname(__FILE__), "sock_entries.xml"))
|
95
|
-
@bundle_with_466_sock_entries = File.read(file)
|
96
|
-
|
97
|
-
def rexml_count_socks
|
98
|
-
doc = REXML::Document.new(@bundle_with_466_sock_entries).root
|
99
|
-
socks = doc.elements.to_a('./sockEntries').length
|
100
|
-
end
|
101
|
-
|
102
|
-
unless RUBY_PLATFORM =~ /java/
|
103
|
-
def nokogiri_count_socks
|
104
|
-
#doc = Nokogiri(@bundle_with_466_sock_entries)
|
105
|
-
#socks = doc.search('//sockEntries').length
|
106
|
-
end
|
107
|
-
|
108
|
-
def libxml_count_socks
|
109
|
-
@xml_parser = LibXML::XML::Parser.new
|
110
|
-
@xml_parser.string = @bundle_with_466_sock_entries
|
111
|
-
doc = @xml_parser.parse
|
112
|
-
socks = doc.find('//sockEntries').length
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def hpricot_count_socks
|
117
|
-
doc = Hpricot.XML(@bundle_with_466_sock_entries)
|
118
|
-
socks = doc.search("//sockEntries").length
|
119
|
-
end
|
120
|
-
|
121
|
-
if RUBY_PLATFORM =~ /java/
|
122
|
-
def jdom_document_builder_count_socks
|
123
|
-
file = File.expand_path(File.join(File.dirname(__FILE__), "sock_entries.xml"))
|
124
|
-
doc = @dbf.new_document_builder.parse(file).get_document_element
|
125
|
-
socks = doc.getElementsByTagName("sockEntries")
|
126
|
-
socks.get_length
|
127
|
-
end
|
128
|
-
end
|
129
|
-
|
130
|
-
n = 100
|
131
|
-
test_iterations = ARGV.first.to_i
|
132
|
-
test_iterations = 1 unless test_iterations > 1
|
133
|
-
puts
|
134
|
-
puts @ruby_info
|
135
|
-
puts
|
136
|
-
puts "#{n} times: Open 98k XML document and count one type of leaf element (466 entries)"
|
137
|
-
puts
|
138
|
-
print "running benchmark "
|
139
|
-
if test_iterations == 1
|
140
|
-
puts "once.\n\n"
|
141
|
-
else
|
142
|
-
puts "#{test_iterations} times.\n\n"
|
143
|
-
end
|
144
|
-
test_iterations.times do
|
145
|
-
Benchmark.bmbm do |x|
|
146
|
-
x.report("rexml") { n.times {rexml_count_socks} }
|
147
|
-
x.report("hpricot") { n.times {hpricot_count_socks} }
|
148
|
-
x.report("jdom_document_builder") { n.times {jdom_document_builder_count_socks} } if RUBY_PLATFORM =~ /java/
|
149
|
-
#x.report("nokogiri") { n.times {nokogiri_count_socks} } unless RUBY_PLATFORM =~ /java/
|
150
|
-
x.report("libxml") { n.times {libxml_count_socks} } unless RUBY_PLATFORM =~ /java/
|
151
|
-
end
|
152
|
-
puts
|
153
|
-
end
|
154
|
-
|
155
|
-
#
|
156
|
-
# jrexml doesn't appear to have any speedup in this test
|
157
|
-
#
|
158
|
-
# if RUBY_PLATFORM =~ /java/
|
159
|
-
# require 'jrexml'
|
160
|
-
# def rexml_with_jrexml_count_socks
|
161
|
-
# doc = REXML::Document.new(@bundle_with_466_sock_entries).root
|
162
|
-
# socks = doc.elements.to_a('./sockEntries').length
|
163
|
-
# end
|
164
|
-
#
|
165
|
-
# puts "\nNow add in JREXML to see if it speeds up rexml\n"
|
166
|
-
# Benchmark.bmbm do |x|
|
167
|
-
# x.report("rexml+jrexml") { n.times {rexml_with_jrexml_count_socks} }
|
168
|
-
# end
|
169
|
-
# puts
|
170
|
-
# end
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
#
|
3
|
+
# Each test has an XML Parser open a 98k XML document and count one type of leaf
|
4
|
+
# element (466 entries). This is repeated a total of 100 times, twice for each Parser.
|
5
|
+
# Summary measurements are from the second test.
|
6
|
+
#
|
7
|
+
# Tests run on a MacBook Pro, Mac OS X 10.5.5, 4GB memory, 2.5 GHz Intel Core 2 Duo.
|
8
|
+
#
|
9
|
+
# Library versions:
|
10
|
+
# hpricot 0.6.164
|
11
|
+
# libxml: 0.9.2
|
12
|
+
#
|
13
|
+
# All benchmarks were run twice in sequence and the measurements presented here are from
|
14
|
+
# the second run. Java automatically optimizes JRuby code which is run many times and the
|
15
|
+
# speedup from the first to the second test is from 40 to 75%. There is no essential
|
16
|
+
# difference in the speed of the C version of Ruby between the first test and the second.
|
17
|
+
#
|
18
|
+
# Summary:
|
19
|
+
#
|
20
|
+
# 100 times: Open 98k XML document and count one type of leaf element (466 entries)
|
21
|
+
#
|
22
|
+
# JRuby (Java 1.6.0_03-p3-Soylatte using server mode): jdom_document_builder 0.360
|
23
|
+
# MRI: libxml v0.9.2 0.383
|
24
|
+
# JRuby (Java 1.6.0_07): jdom_document_builder 0.401
|
25
|
+
# JRuby (Java 1.5.0_16): jdom_document_builder 0.428
|
26
|
+
# JRuby (Java 1.6.0_03-p3-Soylatte using server mode): hpricot 1.977
|
27
|
+
# JRuby (Java 1.5.0_16): hpricot 2.027
|
28
|
+
# JRuby (Java 1.6.0_07): hpricot 2.094
|
29
|
+
# MRI: hpricot 2.140
|
30
|
+
# JRuby (Java 1.6.0_03-p3-Soylatte using server mode): rexml 5.488
|
31
|
+
# JRuby (Java 1.5.0_16): rexml 5.569
|
32
|
+
# JRuby (Java 1.5.0_16): rexml 5.578
|
33
|
+
# MRI: rexml 8.606
|
34
|
+
#
|
35
|
+
# Ruby version: MRI 1.8.6 (2008-03-03 rev 114), platform: universal-darwin9.0
|
36
|
+
# --------------------------------------------------------------------------------
|
37
|
+
# user system total real
|
38
|
+
# rexml 8.170000 0.100000 8.270000 ( 8.606676)
|
39
|
+
# hpricot 1.990000 0.040000 2.030000 ( 2.140865)
|
40
|
+
# libxml 0.350000 0.020000 0.370000 ( 0.383475)
|
41
|
+
#
|
42
|
+
# JRuby 1.1.5 (svn r8078) on Java 1.5.0_16
|
43
|
+
# --------------------------------------------------------------------------------
|
44
|
+
# user system total real
|
45
|
+
# rexml 5.578000 0.000000 5.578000 ( 5.578371)
|
46
|
+
# hpricot 2.028000 0.000000 2.028000 ( 2.027348)
|
47
|
+
# jdom_document_builder 0.429000 0.000000 0.429000 ( 0.428713)
|
48
|
+
#
|
49
|
+
# JRuby 1.1.5 (svn r8078) on Java 1.6.0_07
|
50
|
+
# --------------------------------------------------------------------------------
|
51
|
+
# user system total real
|
52
|
+
# rexml 5.569000 0.000000 5.569000 ( 5.569135)
|
53
|
+
# hpricot 2.094000 0.000000 2.094000 ( 2.093635)
|
54
|
+
# jdom_document_builder 0.401000 0.000000 0.401000 ( 0.401115)
|
55
|
+
#
|
56
|
+
# JRuby 1.1.5 (svn r8078) on Java 1.6.0_07 using server mode (-J-server)
|
57
|
+
# --------------------------------------------------------------------------------
|
58
|
+
# user system total real
|
59
|
+
# rexml 5.489000 0.000000 5.489000 ( 5.488560)
|
60
|
+
# hpricot 1.977000 0.000000 1.977000 ( 1.976845)
|
61
|
+
# jdom_document_builder 0.377000 0.000000 0.377000 ( 0.377808)
|
62
|
+
#
|
63
|
+
# JRuby 1.1.5 (svn r8078) on Java 1.6.0_03-p3 (Soylatte) using server mode (-J-server)
|
64
|
+
# --------------------------------------------------------------------------------
|
65
|
+
# user system total real
|
66
|
+
# rexml 5.596000 0.000000 5.596000 ( 5.596212)
|
67
|
+
# hpricot 1.937000 0.000000 1.937000 ( 1.937312)
|
68
|
+
# jdom_document_builder 0.360000 0.000000 0.360000 ( 0.360068)
|
69
|
+
|
70
|
+
require 'rubygems'
|
71
|
+
require 'benchmark'
|
72
|
+
require "rexml/document"
|
73
|
+
require 'hpricot'
|
74
|
+
|
75
|
+
if RUBY_PLATFORM =~ /java/
|
76
|
+
include Java
|
77
|
+
import javax.xml.parsers.DocumentBuilder
|
78
|
+
import javax.xml.parsers.DocumentBuilderFactory
|
79
|
+
@dbf = DocumentBuilderFactory.new_instance
|
80
|
+
@ruby_info = "Ruby version: JRuby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL}) [i386-jruby#{JRUBY_VERSION}]"
|
81
|
+
@ruby_info << ", platform: Java, version #{java.lang.System.getProperty('java.version')}"
|
82
|
+
else
|
83
|
+
@ruby_info = "Ruby version: MRI #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL})"
|
84
|
+
@ruby_info << ", platform: #{RUBY_PLATFORM}"
|
85
|
+
|
86
|
+
gem 'nokogiri', '>= 1.0.6'
|
87
|
+
require 'nokogiri'
|
88
|
+
|
89
|
+
gem 'libxml-ruby', '>= 0.9.2'
|
90
|
+
require 'libxml'
|
91
|
+
@xml_parser = LibXML::XML::Parser.new
|
92
|
+
end
|
93
|
+
|
94
|
+
file = File.expand_path(File.join(File.dirname(__FILE__), "sock_entries.xml"))
|
95
|
+
@bundle_with_466_sock_entries = File.read(file)
|
96
|
+
|
97
|
+
def rexml_count_socks
|
98
|
+
doc = REXML::Document.new(@bundle_with_466_sock_entries).root
|
99
|
+
socks = doc.elements.to_a('./sockEntries').length
|
100
|
+
end
|
101
|
+
|
102
|
+
unless RUBY_PLATFORM =~ /java/
|
103
|
+
def nokogiri_count_socks
|
104
|
+
#doc = Nokogiri(@bundle_with_466_sock_entries)
|
105
|
+
#socks = doc.search('//sockEntries').length
|
106
|
+
end
|
107
|
+
|
108
|
+
def libxml_count_socks
|
109
|
+
@xml_parser = LibXML::XML::Parser.new
|
110
|
+
@xml_parser.string = @bundle_with_466_sock_entries
|
111
|
+
doc = @xml_parser.parse
|
112
|
+
socks = doc.find('//sockEntries').length
|
113
|
+
end
|
114
|
+
end
|
115
|
+
|
116
|
+
def hpricot_count_socks
|
117
|
+
doc = Hpricot.XML(@bundle_with_466_sock_entries)
|
118
|
+
socks = doc.search("//sockEntries").length
|
119
|
+
end
|
120
|
+
|
121
|
+
if RUBY_PLATFORM =~ /java/
|
122
|
+
def jdom_document_builder_count_socks
|
123
|
+
file = File.expand_path(File.join(File.dirname(__FILE__), "sock_entries.xml"))
|
124
|
+
doc = @dbf.new_document_builder.parse(file).get_document_element
|
125
|
+
socks = doc.getElementsByTagName("sockEntries")
|
126
|
+
socks.get_length
|
127
|
+
end
|
128
|
+
end
|
129
|
+
|
130
|
+
n = 100
|
131
|
+
test_iterations = ARGV.first.to_i
|
132
|
+
test_iterations = 1 unless test_iterations > 1
|
133
|
+
puts
|
134
|
+
puts @ruby_info
|
135
|
+
puts
|
136
|
+
puts "#{n} times: Open 98k XML document and count one type of leaf element (466 entries)"
|
137
|
+
puts
|
138
|
+
print "running benchmark "
|
139
|
+
if test_iterations == 1
|
140
|
+
puts "once.\n\n"
|
141
|
+
else
|
142
|
+
puts "#{test_iterations} times.\n\n"
|
143
|
+
end
|
144
|
+
test_iterations.times do
|
145
|
+
Benchmark.bmbm do |x|
|
146
|
+
x.report("rexml") { n.times {rexml_count_socks} }
|
147
|
+
x.report("hpricot") { n.times {hpricot_count_socks} }
|
148
|
+
x.report("jdom_document_builder") { n.times {jdom_document_builder_count_socks} } if RUBY_PLATFORM =~ /java/
|
149
|
+
#x.report("nokogiri") { n.times {nokogiri_count_socks} } unless RUBY_PLATFORM =~ /java/
|
150
|
+
x.report("libxml") { n.times {libxml_count_socks} } unless RUBY_PLATFORM =~ /java/
|
151
|
+
end
|
152
|
+
puts
|
153
|
+
end
|
154
|
+
|
155
|
+
#
|
156
|
+
# jrexml doesn't appear to have any speedup in this test
|
157
|
+
#
|
158
|
+
# if RUBY_PLATFORM =~ /java/
|
159
|
+
# require 'jrexml'
|
160
|
+
# def rexml_with_jrexml_count_socks
|
161
|
+
# doc = REXML::Document.new(@bundle_with_466_sock_entries).root
|
162
|
+
# socks = doc.elements.to_a('./sockEntries').length
|
163
|
+
# end
|
164
|
+
#
|
165
|
+
# puts "\nNow add in JREXML to see if it speeds up rexml\n"
|
166
|
+
# Benchmark.bmbm do |x|
|
167
|
+
# x.report("rexml+jrexml") { n.times {rexml_with_jrexml_count_socks} }
|
168
|
+
# end
|
169
|
+
# puts
|
170
|
+
# end
|
data/script/benchmark/throughput
CHANGED
@@ -1,41 +1,41 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'rubygems'
|
4
|
-
require 'hpricot'
|
5
|
-
require 'xml'
|
6
|
-
require 'rexml/document'
|
7
|
-
|
8
|
-
ITERATIONS = 3
|
9
|
-
NESTED_ITERATIONS = 5
|
10
|
-
|
11
|
-
def bm(name, filename, &block)
|
12
|
-
text = File.open(filename).read
|
13
|
-
length = text.length / 1024.0 / 1024.0
|
14
|
-
puts "#{filename}: #{name} (#{(length * 1024).round} kb)"
|
15
|
-
for j in 0 .. NESTED_ITERATIONS
|
16
|
-
s = Time.now.to_f
|
17
|
-
for i in 0 .. ITERATIONS
|
18
|
-
block.call(text)
|
19
|
-
end
|
20
|
-
timer = Time.now.to_f - s
|
21
|
-
puts "\t#{length * ITERATIONS / timer} MB/s"
|
22
|
-
end
|
23
|
-
end
|
24
|
-
|
25
|
-
def bm_suite(filenames)
|
26
|
-
filenames.each do |filename|
|
27
|
-
bm("LIBXML THROUGHPUT:", filename) do |text|
|
28
|
-
XML::Document.file(filename)
|
29
|
-
end
|
30
|
-
|
31
|
-
bm("HPRICOT THROUGHPUT:", filename) do |text|
|
32
|
-
Hpricot.XML(text)
|
33
|
-
end
|
34
|
-
|
35
|
-
bm("REXML THROUGHPUT:", filename) do |text|
|
36
|
-
REXML::Document.new(text)
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
|
41
|
-
bm_suite("hamlet.xml")
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'hpricot'
|
5
|
+
require 'xml'
|
6
|
+
require 'rexml/document'
|
7
|
+
|
8
|
+
ITERATIONS = 3
|
9
|
+
NESTED_ITERATIONS = 5
|
10
|
+
|
11
|
+
def bm(name, filename, &block)
|
12
|
+
text = File.open(filename).read
|
13
|
+
length = text.length / 1024.0 / 1024.0
|
14
|
+
puts "#{filename}: #{name} (#{(length * 1024).round} kb)"
|
15
|
+
for j in 0 .. NESTED_ITERATIONS
|
16
|
+
s = Time.now.to_f
|
17
|
+
for i in 0 .. ITERATIONS
|
18
|
+
block.call(text)
|
19
|
+
end
|
20
|
+
timer = Time.now.to_f - s
|
21
|
+
puts "\t#{length * ITERATIONS / timer} MB/s"
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def bm_suite(filenames)
|
26
|
+
filenames.each do |filename|
|
27
|
+
bm("LIBXML THROUGHPUT:", filename) do |text|
|
28
|
+
XML::Document.file(filename)
|
29
|
+
end
|
30
|
+
|
31
|
+
bm("HPRICOT THROUGHPUT:", filename) do |text|
|
32
|
+
Hpricot.XML(text)
|
33
|
+
end
|
34
|
+
|
35
|
+
bm("REXML THROUGHPUT:", filename) do |text|
|
36
|
+
REXML::Document.new(text)
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
bm_suite("hamlet.xml")
|
data/script/test
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
%w{test lib ext/libxml}.each{ |path| $LOAD_PATH.unshift(path) }
|
4
|
-
|
5
|
-
load './test/test_suite.rb'
|
6
|
-
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
%w{test lib ext/libxml}.each{ |path| $LOAD_PATH.unshift(path) }
|
4
|
+
|
5
|
+
load './test/test_suite.rb'
|
6
|
+
|
@@ -1,14 +1,14 @@
|
|
1
|
-
<?xml version="1.0"?>
|
2
|
-
|
3
|
-
<?xml-stylesheet href="doc.xsl"
|
4
|
-
type="text/xsl" ?>
|
5
|
-
|
6
|
-
<!DOCTYPE doc SYSTEM "doc.dtd">
|
7
|
-
|
8
|
-
<doc>Hello, world!<!-- Comment 1 --></doc>
|
9
|
-
|
10
|
-
<?pi-without-data ?>
|
11
|
-
|
12
|
-
<!-- Comment 2 -->
|
13
|
-
|
14
|
-
<!-- Comment 3 -->
|
1
|
+
<?xml version="1.0"?>
|
2
|
+
|
3
|
+
<?xml-stylesheet href="doc.xsl"
|
4
|
+
type="text/xsl" ?>
|
5
|
+
|
6
|
+
<!DOCTYPE doc SYSTEM "doc.dtd">
|
7
|
+
|
8
|
+
<doc>Hello, world!<!-- Comment 1 --></doc>
|
9
|
+
|
10
|
+
<?pi-without-data ?>
|
11
|
+
|
12
|
+
<!-- Comment 2 -->
|
13
|
+
|
14
|
+
<!-- Comment 3 -->
|