xamplr 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES.txt +13 -0
- data/LICENSE +3 -0
- data/README.rdoc +26 -0
- data/README.rdoc.orig +118 -0
- data/Rakefile +85 -0
- data/VERSION.yml +4 -0
- data/examples/random-people-shared-addresses/Makefile +16 -0
- data/examples/random-people-shared-addresses/batch-load-users.rb +83 -0
- data/examples/random-people-shared-addresses/find-mentions.rb +47 -0
- data/examples/random-people-shared-addresses/find-people-by-address.rb +104 -0
- data/examples/random-people-shared-addresses/optimise.rb +16 -0
- data/examples/random-people-shared-addresses/people.rb +35 -0
- data/examples/random-people-shared-addresses/query.rb +75 -0
- data/examples/random-people-shared-addresses/query2.rb +73 -0
- data/examples/random-people-shared-addresses/random-names.csv +10000 -0
- data/examples/random-people-shared-addresses/settings.rb +3 -0
- data/examples/random-people-shared-addresses/what-to-query-on.rb +82 -0
- data/examples/random-people-shared-addresses/xampl-gen.rb +36 -0
- data/examples/random-people-shared-addresses/xml/people.xml +14 -0
- data/examples/random-people/Makefile +16 -0
- data/examples/random-people/batch-load-users.rb +61 -0
- data/examples/random-people/optimise.rb +16 -0
- data/examples/random-people/people.rb +22 -0
- data/examples/random-people/query.rb +73 -0
- data/examples/random-people/query2.rb +73 -0
- data/examples/random-people/random-names.csv +10000 -0
- data/examples/random-people/rawtc.rb +91 -0
- data/examples/random-people/settings.rb +3 -0
- data/examples/random-people/what-to-query-on.rb +80 -0
- data/examples/random-people/xampl-gen.rb +36 -0
- data/examples/random-people/xml/people.xml +11 -0
- data/examples/read-testing/Makefile +10 -0
- data/examples/read-testing/load.rb +65 -0
- data/examples/read-testing/read.rb +51 -0
- data/examples/read-testing/rrr.rb +87 -0
- data/examples/read-testing/settings.rb +2 -0
- data/examples/read-testing/xampl-gen.rb +36 -0
- data/examples/read-testing/xml/text.xml +8 -0
- data/examples/tokyo-cabinet-experimental/expt-query.rb +42 -0
- data/examples/tokyo-cabinet-experimental/expt-query2.rb +42 -0
- data/examples/tokyo-cabinet-experimental/expt-query3.rb +41 -0
- data/examples/tokyo-cabinet-experimental/expt-reader.rb +32 -0
- data/examples/tokyo-cabinet-experimental/expt.rb +61 -0
- data/examples/tokyo-cabinet-experimental/xampl-gen.rb +36 -0
- data/examples/tokyo-cabinet-experimental/xml/tcx.xml +6 -0
- data/lib/xampl-generator.rb +3 -0
- data/lib/xampl.rb +3 -0
- data/lib/xamplr-generator.rb +10 -0
- data/lib/xamplr.rb +37 -0
- data/lib/xamplr/README-POSSIBLE-PROBLEMS +5 -0
- data/lib/xamplr/TODO +1 -0
- data/lib/xamplr/exceptions.rb +97 -0
- data/lib/xamplr/from-xml-orig.rb +350 -0
- data/lib/xamplr/from-xml.rb +439 -0
- data/lib/xamplr/gen-elements.xml +6230 -0
- data/lib/xamplr/gen.elements.xml +108 -0
- data/lib/xamplr/generate-elements.rb +15 -0
- data/lib/xamplr/generator.rb +5 -0
- data/lib/xamplr/graphml-out.rb +470 -0
- data/lib/xamplr/handwritten/example.rb +698 -0
- data/lib/xamplr/handwritten/hand-example.rb +533 -0
- data/lib/xamplr/handwritten/test-handwritten.rb +873 -0
- data/lib/xamplr/indexed-array.rb +115 -0
- data/lib/xamplr/mixins.rb +397 -0
- data/lib/xamplr/my.gen.elements.xml +461 -0
- data/lib/xamplr/notifications.rb +57 -0
- data/lib/xamplr/obsolete/fsdb.rb +62 -0
- data/lib/xamplr/persist-to-xml.rb +249 -0
- data/lib/xamplr/persistence.rb +522 -0
- data/lib/xamplr/persistence.rb.more_thread_safe +771 -0
- data/lib/xamplr/persistence.rb.partially_thread_safe +763 -0
- data/lib/xamplr/persister.rb +310 -0
- data/lib/xamplr/persisters/caches.rb +186 -0
- data/lib/xamplr/persisters/caching.rb +172 -0
- data/lib/xamplr/persisters/filesystem.rb +60 -0
- data/lib/xamplr/persisters/in-memory.rb +180 -0
- data/lib/xamplr/persisters/simple.rb +59 -0
- data/lib/xamplr/persisters/tokyo-cabinet.rb +641 -0
- data/lib/xamplr/simpleTemplate/danger.rx +4 -0
- data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +35 -0
- data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +12 -0
- data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +20 -0
- data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +8 -0
- data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +13 -0
- data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +37 -0
- data/lib/xamplr/simpleTemplate/old/r6.000.rb +122 -0
- data/lib/xamplr/simpleTemplate/old/r6.001.rb +145 -0
- data/lib/xamplr/simpleTemplate/play.r6 +12 -0
- data/lib/xamplr/simpleTemplate/play_more.r6 +20 -0
- data/lib/xamplr/simpleTemplate/play_noblanks.r6 +21 -0
- data/lib/xamplr/simpleTemplate/playq.r6 +16 -0
- data/lib/xamplr/simpleTemplate/r6.rb +87 -0
- data/lib/xamplr/simpleTemplate/simple-template.rb +75 -0
- data/lib/xamplr/templates/child.template +47 -0
- data/lib/xamplr/templates/child_indexed.template +89 -0
- data/lib/xamplr/templates/child_modules.template +5 -0
- data/lib/xamplr/templates/element_classes.template +11 -0
- data/lib/xamplr/templates/element_data.template +282 -0
- data/lib/xamplr/templates/element_empty.template +285 -0
- data/lib/xamplr/templates/element_mixed.template +277 -0
- data/lib/xamplr/templates/element_simple.template +276 -0
- data/lib/xamplr/templates/package.template +26 -0
- data/lib/xamplr/test-support/Makefile +47 -0
- data/lib/xamplr/test-support/bench-cache.rb +80 -0
- data/lib/xamplr/test-support/bench-script.rb +21 -0
- data/lib/xamplr/test-support/bench.rb +116 -0
- data/lib/xamplr/test-support/bench2.rb +132 -0
- data/lib/xamplr/test-support/test-cache.rb +147 -0
- data/lib/xamplr/test-support/test-data/binding.xml +7 -0
- data/lib/xamplr/test-support/test-data/example.xml +14 -0
- data/lib/xamplr/test-support/test-data/internationalization-utf8.txt +1 -0
- data/lib/xamplr/test-support/test-data/labels.xml +37 -0
- data/lib/xamplr/test-support/test-data/labels001.xml +38 -0
- data/lib/xamplr/test-support/test-deep-change.rb +135 -0
- data/lib/xamplr/test-support/test-elements.rb +109 -0
- data/lib/xamplr/test-support/test-indexed-array.rb +169 -0
- data/lib/xamplr/test-support/test-misc.rb +73 -0
- data/lib/xamplr/test-support/test-names.rb +67 -0
- data/lib/xamplr/test-support/test-rollback.rb +106 -0
- data/lib/xamplr/test-support/test.rb +1504 -0
- data/lib/xamplr/to-ruby.rb +220 -0
- data/lib/xamplr/to-xml.rb +158 -0
- data/lib/xamplr/version.rb +67 -0
- data/lib/xamplr/visitor.rb +140 -0
- data/lib/xamplr/visitors.rb +573 -0
- data/lib/xamplr/xampl-generator.rb +533 -0
- data/lib/xamplr/xampl-hand-generated.rb +1535 -0
- data/lib/xamplr/xampl-module.rb +36 -0
- data/lib/xamplr/xampl-object-internals.rb +6 -0
- data/lib/xamplr/xampl-object.rb +202 -0
- data/lib/xamplr/xampl-persisted-object.rb +122 -0
- data/lib/xamplr/xml-text.rb +117 -0
- data/lib/xamplr/xml/document.xml +7 -0
- data/lib/xamplr/xml/elements.xml +101 -0
- data/lib/xamplr/xml/elements000.xml +73 -0
- data/lib/xamplr/xml/example.xml +23 -0
- data/lib/xamplr/xml/options.xml +12 -0
- data/lib/xamplr/xml/uche.xml +38 -0
- data/lib/xamplr/yEd-sample.graphml +300 -0
- data/test/test_helper.rb +10 -0
- data/test/xamplr_test.rb +7 -0
- metadata +245 -0
@@ -0,0 +1,91 @@
|
|
1
|
+
|
2
|
+
require 'fileutils'
|
3
|
+
require 'fastercsv'
|
4
|
+
require 'tokyocabinet'
|
5
|
+
|
6
|
+
module RawTokyoCabinet
|
7
|
+
include TokyoCabinet
|
8
|
+
|
9
|
+
def RawTokyoCabinet.note_errors(msg="TokyoCabinet Error:: %s\n")
|
10
|
+
result = yield
|
11
|
+
|
12
|
+
rmsg = nil
|
13
|
+
unless result then
|
14
|
+
rmsg = sprintf(msg, @tc_db.errmsg(@tc_db.ecode))
|
15
|
+
STDERR.printf(rmsg)
|
16
|
+
caller(0).each do |trace|
|
17
|
+
STDERR.puts(trace)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
return rmsg
|
21
|
+
end
|
22
|
+
|
23
|
+
start_at = Time.now
|
24
|
+
|
25
|
+
arr_of_arrs = FasterCSV.read("random-names.csv")
|
26
|
+
|
27
|
+
parsed_at = Time.now
|
28
|
+
|
29
|
+
@tc_db = TDB.new
|
30
|
+
RawTokyoCabinet.note_errors("TC:: tuning error: %s\n") do
|
31
|
+
@tc_db.tune(-1, -1, -1, TDB::TDEFLATE)
|
32
|
+
end
|
33
|
+
|
34
|
+
FileUtils.mkdir_p('repo/raw') unless File.exist?('repo/raw')
|
35
|
+
|
36
|
+
10.times do | iter |
|
37
|
+
RawTokyoCabinet.note_errors("TC:: open error: %s\n") do
|
38
|
+
@tc_db.open('repo/raw/repo.tct', TDB::OWRITER | TDB::OCREAT | TDB::OLCKNB ) #TDB::OTSYNC slows it down by almost 50 times
|
39
|
+
end
|
40
|
+
|
41
|
+
# Don't care if there are errors (in fact, if the index exists a failure is the expected thing)
|
42
|
+
%w{ surname city state email }.each do | index_name |
|
43
|
+
@tc_db.setindex(index_name, TDB::ITLEXICAL | TDB::ITKEEP)
|
44
|
+
end
|
45
|
+
|
46
|
+
$tc_time = 0
|
47
|
+
record_count = @tc_db.rnum()
|
48
|
+
|
49
|
+
inner_start = Time.now
|
50
|
+
|
51
|
+
arr_of_arrs.each_with_index do | row, i |
|
52
|
+
|
53
|
+
# indexes = {
|
54
|
+
# 'surname' => row[1],
|
55
|
+
# 'city' => row[3],
|
56
|
+
# 'state' => row[4],
|
57
|
+
# 'email' => row[6]
|
58
|
+
# }
|
59
|
+
|
60
|
+
data = {
|
61
|
+
'given_name' => row[0],
|
62
|
+
'surname' => row[1],
|
63
|
+
'street_address' => row[2],
|
64
|
+
'city' => row[3],
|
65
|
+
'state' => row[4],
|
66
|
+
'postal_code' => row[5],
|
67
|
+
'email' => row[6],
|
68
|
+
'phone' => row[7]
|
69
|
+
}
|
70
|
+
|
71
|
+
RawTokyoCabinet.note_errors("TC:: write error: %s\n") do
|
72
|
+
start = Time.now
|
73
|
+
@tc_db.put("person-#{ record_count + i }", data)
|
74
|
+
$tc_time += Time.now - start
|
75
|
+
end
|
76
|
+
|
77
|
+
end
|
78
|
+
|
79
|
+
final_count = @tc_db.rnum
|
80
|
+
|
81
|
+
RawTokyoCabinet.note_errors("TC:: close error: %s\n") do
|
82
|
+
@tc_db.close
|
83
|
+
end
|
84
|
+
|
85
|
+
processed_at = Time.now
|
86
|
+
|
87
|
+
p "parsed in #{ parsed_at - start_at }, processed in: #{ processed_at - parsed_at }"
|
88
|
+
p "starting at #{ record_count } records, now with: #{ final_count }"
|
89
|
+
end
|
90
|
+
|
91
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
$LOAD_PATH.unshift("xampl_generated_code")
|
2
|
+
|
3
|
+
require 'set'
|
4
|
+
require 'fastercsv'
|
5
|
+
require 'RandomPeople'
|
6
|
+
require 'people'
|
7
|
+
require 'settings'
|
8
|
+
|
9
|
+
module RandomPeople
|
10
|
+
arr_of_arrs = FasterCSV.read("random-names.csv")
|
11
|
+
|
12
|
+
surnames = Set.new
|
13
|
+
cities = Set.new
|
14
|
+
states = Set.new
|
15
|
+
email_domains = Set.new
|
16
|
+
|
17
|
+
arr_of_arrs.each do | row |
|
18
|
+
surname = row[1]
|
19
|
+
city = row[3]
|
20
|
+
state = row[4]
|
21
|
+
|
22
|
+
surnames << surname
|
23
|
+
cities << city
|
24
|
+
states << state
|
25
|
+
|
26
|
+
email = row[6]
|
27
|
+
domain = email.split("@")
|
28
|
+
if 2 == domain.size then
|
29
|
+
email_domains << domain[1]
|
30
|
+
end
|
31
|
+
|
32
|
+
end
|
33
|
+
|
34
|
+
puts "surnames: #{ surnames.size }"
|
35
|
+
puts "cities: #{ cities.size }"
|
36
|
+
puts "states: #{ states.size }"
|
37
|
+
puts "email_domains: #{ email_domains.size }"
|
38
|
+
|
39
|
+
puts "STATES:"
|
40
|
+
puts states.to_a.sort.inspect
|
41
|
+
|
42
|
+
puts "EMAIL DOMAINS:"
|
43
|
+
puts email_domains.to_a.sort.inspect
|
44
|
+
|
45
|
+
#GivenName,Surname,StreetAddress,City,State,ZipCode,EmailAddress,TelephoneNumber
|
46
|
+
#<people pid='' xmlns="http://xampl.com/people">
|
47
|
+
# <person pid=''
|
48
|
+
# given-name=''
|
49
|
+
# surname=''
|
50
|
+
# street-address=''
|
51
|
+
# city=''
|
52
|
+
# state=''
|
53
|
+
# postal-code=''
|
54
|
+
# email=''
|
55
|
+
# phone=''/>
|
56
|
+
#</people>
|
57
|
+
|
58
|
+
# Xampl.transaction("random-people") do
|
59
|
+
#
|
60
|
+
# people = People.new('people')
|
61
|
+
#
|
62
|
+
# arr_of_arrs.each_with_index do | row, i |
|
63
|
+
# person = people.new_person("person-#{ i }")
|
64
|
+
# person.given_name = row[0]
|
65
|
+
# person.surname = row[1]
|
66
|
+
# person.street_address = row[2]
|
67
|
+
# person.city = row[3]
|
68
|
+
# person.state = row[4]
|
69
|
+
# person.postal_code = row[5]
|
70
|
+
# person.email = row[6]
|
71
|
+
# person.phone = row[7]
|
72
|
+
# end
|
73
|
+
# end
|
74
|
+
#
|
75
|
+
# processed_at = Time.now
|
76
|
+
#
|
77
|
+
# p counts
|
78
|
+
# p "parsed in #{ parsed_at - start_at }, counted in: #{ counted_at - parsed_at }, processed in: #{ processed_at - counted_at }"
|
79
|
+
|
80
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
#!/usr/bin/env ruby -w -I..
|
2
|
+
|
3
|
+
if $0 == __FILE__ then
|
4
|
+
|
5
|
+
class File
|
6
|
+
def File.sjoin(*args)
|
7
|
+
File.join(args.select{ | o | o })
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
require 'xamplr-generator'
|
12
|
+
|
13
|
+
include XamplGenerator
|
14
|
+
include Xampl
|
15
|
+
|
16
|
+
Xampl.transaction("setup", :in_memory) do
|
17
|
+
directory = File.sjoin(".", "xampl_generated_code")
|
18
|
+
|
19
|
+
options = Xampl.make(Options) do |options|
|
20
|
+
options.new_index_attribute("pid").persisted = true
|
21
|
+
options.new_index_attribute("id")
|
22
|
+
|
23
|
+
options.resolve("http://xampl.com/people", "RandomPeople", "p")
|
24
|
+
end
|
25
|
+
|
26
|
+
filenames = Dir.glob("./xml/**/*.xml")
|
27
|
+
|
28
|
+
generator = Generator.new
|
29
|
+
generator.go(:options => options,
|
30
|
+
:filenames => filenames,
|
31
|
+
:directory => directory)
|
32
|
+
|
33
|
+
#puts generator.print_elements("./generated-elements.xml")
|
34
|
+
exit!
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
$LOAD_PATH.unshift("xampl_generated_code")
|
2
|
+
|
3
|
+
require 'rubygems'
|
4
|
+
require 'Perf'
|
5
|
+
require 'settings'
|
6
|
+
|
7
|
+
module Perf
|
8
|
+
|
9
|
+
count = 0
|
10
|
+
root = nil
|
11
|
+
$total_lines = 0
|
12
|
+
|
13
|
+
srand( 12345 )
|
14
|
+
|
15
|
+
def Perf.make_text(count)
|
16
|
+
lines = 1 + rand(10)
|
17
|
+
$total_lines += lines
|
18
|
+
|
19
|
+
s = ""
|
20
|
+
lines.times do | i |
|
21
|
+
s << "this is a line for count: #{ count }, #{ i } of #{ lines } with scary stuff: <>&'\" ..."
|
22
|
+
end
|
23
|
+
return s
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
#<root pid=''
|
28
|
+
# xmlns="http://xampl.com/performance">
|
29
|
+
# <text pid=''
|
30
|
+
# size=''
|
31
|
+
# stuff=''>
|
32
|
+
# actual text
|
33
|
+
# </text>
|
34
|
+
#</root>
|
35
|
+
|
36
|
+
start_at = Time.now
|
37
|
+
|
38
|
+
1.times do | outer |
|
39
|
+
Xampl.transaction("random-people") do
|
40
|
+
unless root then
|
41
|
+
root = Root.new('root')
|
42
|
+
end
|
43
|
+
|
44
|
+
10000.times do | iter |
|
45
|
+
|
46
|
+
count += 1
|
47
|
+
|
48
|
+
text = root.new_text("text-#{ count }")
|
49
|
+
text.stuff = "---<>&\"'---"
|
50
|
+
text.content = make_text(count)
|
51
|
+
|
52
|
+
# puts "#{File.basename(__FILE__)}:#{__LINE__} #{ text.pp_xml }"
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
puts "transaction #{ outer } ending... #{ Time.now - start_at } seconds"
|
58
|
+
# puts "#{File.basename(__FILE__)}:#{__LINE__} #{ root.pp_xml }"
|
59
|
+
end
|
60
|
+
|
61
|
+
done_at = Time.now
|
62
|
+
|
63
|
+
p "loaded #{ count }, total lines: #{ $total_lines }, in #{ done_at - start_at }"
|
64
|
+
|
65
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'xampl_generated_code/Perf'
|
3
|
+
require 'settings'
|
4
|
+
|
5
|
+
module Perf
|
6
|
+
|
7
|
+
count = 0
|
8
|
+
root = nil
|
9
|
+
$total_lines = 0
|
10
|
+
|
11
|
+
#<root pid=''
|
12
|
+
# xmlns="http://xampl.com/performance">
|
13
|
+
# <text pid=''
|
14
|
+
# size=''
|
15
|
+
# stuff=''>
|
16
|
+
# actual text
|
17
|
+
# </text>
|
18
|
+
#</root>
|
19
|
+
|
20
|
+
start_at = Time.now
|
21
|
+
|
22
|
+
Xampl.transaction("random-people") do
|
23
|
+
root = Root['root']
|
24
|
+
end
|
25
|
+
root_at = Time.now
|
26
|
+
puts "#{File.basename(__FILE__)}:#{__LINE__} Root read in #{ root_at - start_at}"
|
27
|
+
|
28
|
+
root.text.each do | text |
|
29
|
+
count += 1
|
30
|
+
end
|
31
|
+
|
32
|
+
#puts root.pp_xml
|
33
|
+
|
34
|
+
looped_at = Time.now
|
35
|
+
puts "#{File.basename(__FILE__)}:#{__LINE__} looped over #{ count } text in #{ looped_at - root_at } NO LOADING"
|
36
|
+
|
37
|
+
count = 0
|
38
|
+
total_lines = 0
|
39
|
+
|
40
|
+
root.text.each do | text |
|
41
|
+
content = text.content
|
42
|
+
# puts "#{File.basename(__FILE__)}:#{__LINE__} content: [[#{ content }]]"
|
43
|
+
total_lines += content.length() if content
|
44
|
+
count += 1
|
45
|
+
end
|
46
|
+
|
47
|
+
done_at = Time.now
|
48
|
+
|
49
|
+
puts "loaded #{ count }, total lines: #{ total_lines }, in #{ done_at - looped_at } seconds, total time: #{ done_at - start_at } seconds"
|
50
|
+
|
51
|
+
end
|
@@ -0,0 +1,87 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'libxml'
|
3
|
+
|
4
|
+
xml = %Q{
|
5
|
+
<root pid='aaaaa'
|
6
|
+
xmlns:x="http://xampl.com/extra"
|
7
|
+
xmlns="http://xampl.com/performance">
|
8
|
+
<text pid='bbbb'
|
9
|
+
x:size='ccccc'
|
10
|
+
stuff='ddddd'>
|
11
|
+
actual text " well?
|
12
|
+
actual text " well?
|
13
|
+
actual text " well?
|
14
|
+
actual text " well?
|
15
|
+
xxxxx <![CDATA[ <>"'& ]]> xxxxx
|
16
|
+
</text>
|
17
|
+
<nothing/>
|
18
|
+
<x:blob v='blob value'/>
|
19
|
+
</root>
|
20
|
+
}
|
21
|
+
|
22
|
+
reader = LibXML::XML::Reader.string(xml,
|
23
|
+
:options => LibXML::XML::Parser::Options::NOENT |
|
24
|
+
LibXML::XML::Parser::Options::NONET |
|
25
|
+
LibXML::XML::Parser::Options::NOCDATA |
|
26
|
+
LibXML::XML::Parser::Options::DTDATTR |
|
27
|
+
LibXML::XML::Parser::Options::NSCLEAN |
|
28
|
+
LibXML::XML::Parser::Options::COMPACT)
|
29
|
+
|
30
|
+
while reader.read do
|
31
|
+
# puts reader.node_type
|
32
|
+
# puts "line: #{ reader.line_number }, column: #{ reader.column_number }"
|
33
|
+
|
34
|
+
case reader.node_type
|
35
|
+
# when LibXML::XML::Reader::TYPE_ATTRIBUTE
|
36
|
+
# puts "attribute"
|
37
|
+
when LibXML::XML::Reader::TYPE_DOCUMENT
|
38
|
+
puts "DOCUMENT"
|
39
|
+
when LibXML::XML::Reader::TYPE_ELEMENT
|
40
|
+
attribute_count = reader.attribute_count
|
41
|
+
puts "element #{ reader.local_name }, ns: #{ reader.namespace_uri }, #attributes: #{ attribute_count }, depth: #{ reader.depth }"
|
42
|
+
if reader.has_attributes? then
|
43
|
+
reader.move_to_first_attribute
|
44
|
+
attribute_count.times do | i |
|
45
|
+
next if reader.namespace_declaration?
|
46
|
+
puts " attr[#{ i }]:: lname: #{ reader.local_name }, ns: #{ reader.namespace_uri } ---> #{ reader.value }"
|
47
|
+
reader.move_to_next_attribute
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
51
|
+
when LibXML::XML::Reader::TYPE_END_ELEMENT
|
52
|
+
puts "END ELEMENT"
|
53
|
+
when LibXML::XML::Reader::TYPE_TEXT
|
54
|
+
puts "TEXT [[#{ reader.read_string }]]"
|
55
|
+
when LibXML::XML::Reader::TYPE_CDATA
|
56
|
+
puts "CDATA [[#{ reader.read_string }]]"
|
57
|
+
when LibXML::XML::Reader::TYPE_SIGNIFICANT_WHITESPACE
|
58
|
+
puts "SIGNIFICANT white space [[#{ reader.read_string }]]"
|
59
|
+
when LibXML::XML::Reader::TYPE_ENTITY_REFERENCE
|
60
|
+
puts "entity ref"
|
61
|
+
when LibXML::XML::Reader::TYPE_WHITESPACE
|
62
|
+
puts "whitespace"
|
63
|
+
when LibXML::XML::Reader::TYPE_PROCESSING_INSTRUCTION
|
64
|
+
puts "processing instruction"
|
65
|
+
when LibXML::XML::Reader::TYPE_COMMENT
|
66
|
+
puts "comment"
|
67
|
+
when LibXML::XML::Reader::TYPE_DOCUMENT_TYPE
|
68
|
+
puts "doc type"
|
69
|
+
|
70
|
+
when LibXML::XML::Reader::TYPE_XML_DECLARATION
|
71
|
+
puts "xml decl"
|
72
|
+
when LibXML::XML::Reader::TYPE_NONE
|
73
|
+
puts "NONE!!"
|
74
|
+
when LibXML::XML::Reader::TYPE_NOTATION
|
75
|
+
puts "notifiation"
|
76
|
+
when LibXML::XML::Reader::TYPE_DOCUMENT_FRAGMENT
|
77
|
+
puts "doc fragment"
|
78
|
+
when LibXML::XML::Reader::TYPE_ENTITY
|
79
|
+
puts "entity"
|
80
|
+
when LibXML::XML::Reader::TYPE_END_ENTITY
|
81
|
+
puts "
|
82
|
+
end entity"
|
83
|
+
else
|
84
|
+
puts "UNKNOWN: #{reader.node_type}"
|
85
|
+
end
|
86
|
+
|
87
|
+
end
|