xamplr 1.3.15 → 1.9.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.
- data/.gitignore +1 -0
- data/COPYING +160 -656
- data/LICENSE +1 -1
- data/README.md +33 -0
- data/Rakefile +2 -2
- data/VERSION.yml +2 -2
- data/lib/xamplr.rb +1 -0
- data/lib/xamplr/iterator.rb +123 -0
- data/lib/xamplr/xml-text.rb +5 -5
- data/xamplr.gemspec +9 -204
- metadata +13 -203
- data/README.rdoc +0 -46
- data/README.rdoc.orig +0 -118
- data/bin/xampl-gen +0 -17
- data/docs/intro/.gitignore +0 -1
- data/docs/intro/example1/example1.rb +0 -6
- data/docs/intro/example1/xml/hello.xml +0 -1
- data/docs/intro/example2/example2.rb +0 -38
- data/docs/intro/example2/project-generator.rb +0 -22
- data/docs/intro/example2/xml/hello.xml +0 -2
- data/docs/intro/example3/example3.rb +0 -30
- data/docs/intro/example3/example3a.rb +0 -16
- data/docs/intro/example3/generated.png +0 -0
- data/docs/intro/example3/grab-yuml.rb +0 -10
- data/docs/intro/example3/greeter.rb +0 -15
- data/docs/intro/example3/greeting.rb +0 -9
- data/docs/intro/example3/project-generator.rb +0 -25
- data/docs/intro/example3/xml/greeter.xml +0 -6
- data/docs/intro/example4/example4.rb +0 -27
- data/docs/intro/example4/example4a.rb +0 -19
- data/docs/intro/example4/grab-yuml.rb +0 -10
- data/docs/intro/example4/greeter.rb +0 -15
- data/docs/intro/example4/greeting.rb +0 -9
- data/docs/intro/example4/project-generator.rb +0 -25
- data/docs/intro/example4/xml/greeter.xml +0 -6
- data/docs/intro/grab-yuml.rb +0 -10
- data/docs/intro/project-generator.rb +0 -51
- data/docs/intro/xampl.lyx +0 -1494
- data/docs/intro/xampl.pdf +0 -0
- data/examples/employees/final-xampl/xampl-gen.rb +0 -38
- data/examples/employees/final-xampl/xml/ddd-final-xampl.xml +0 -86
- data/examples/employees/final/xampl-gen.rb +0 -38
- data/examples/employees/final/xml/ddd-final.xml +0 -86
- data/examples/employees/first/xampl-gen.rb +0 -38
- data/examples/employees/first/xml/ddd-first.xml +0 -48
- data/examples/employees/twist/twist.graphml +0 -333
- data/examples/employees/twist/xampl-gen.rb +0 -38
- data/examples/employees/twist/xml/twist.xml +0 -90
- data/examples/employees/xamplr-twist.xml +0 -2
- data/examples/employees/yuml-diagrams/DDD-final-approach.graphml +0 -393
- data/examples/employees/yuml-diagrams/DDD-final-xampl-approach.graphml +0 -265
- data/examples/employees/yuml-diagrams/DDD-ideal-final-approach.graphml +0 -357
- data/examples/employees/yuml-diagrams/ddd-final.png +0 -0
- data/examples/employees/yuml-diagrams/ddd-final.yuml +0 -8
- data/examples/employees/yuml-diagrams/ddd-first.png +0 -0
- data/examples/employees/yuml-diagrams/ddd-first.yuml +0 -7
- data/examples/employees/yuml-diagrams/final-yed.png +0 -0
- data/examples/employees/yuml-diagrams/first-yed.png +0 -0
- data/examples/employees/yuml-diagrams/twist.png +0 -0
- data/examples/employees/yuml-diagrams/twist.yuml +0 -12
- data/examples/employees/yuml-diagrams/xamplr-final-no-mixins.png +0 -0
- data/examples/employees/yuml-diagrams/xamplr-final-simplified.png +0 -0
- data/examples/employees/yuml-diagrams/xamplr-final-with-mixins.png +0 -0
- data/examples/employees/yuml-diagrams/yuml-simplified.txt +0 -19
- data/examples/employees/yuml-diagrams/yuml-with-mixins.txt +0 -53
- data/examples/employees/yuml-diagrams/yuml.txt +0 -27
- data/examples/hobbies/Makefile +0 -5
- data/examples/hobbies/hobbies.rb +0 -193
- data/examples/hobbies/project-generator.rb +0 -25
- data/examples/hobbies/xampl-gen.rb +0 -38
- data/examples/hobbies/xml/hobby.xml +0 -3
- data/examples/hobbies/xml/people.xml +0 -5
- data/examples/random-people-shared-addresses/.gitignore +0 -2
- data/examples/random-people-shared-addresses/Makefile +0 -15
- data/examples/random-people-shared-addresses/batch-load-users-profiled.rb +0 -91
- data/examples/random-people-shared-addresses/batch-load-users-safe.rb +0 -81
- data/examples/random-people-shared-addresses/batch-load-users.rb +0 -79
- data/examples/random-people-shared-addresses/find-mentions.rb +0 -47
- data/examples/random-people-shared-addresses/find-people-by-address.rb +0 -104
- data/examples/random-people-shared-addresses/optimise.rb +0 -16
- data/examples/random-people-shared-addresses/people.rb +0 -35
- data/examples/random-people-shared-addresses/query.rb +0 -75
- data/examples/random-people-shared-addresses/query2.rb +0 -73
- data/examples/random-people-shared-addresses/random-names.csv +0 -10000
- data/examples/random-people-shared-addresses/settings.rb +0 -3
- data/examples/random-people-shared-addresses/what-to-query-on.rb +0 -82
- data/examples/random-people-shared-addresses/xampl-gen.rb +0 -38
- data/examples/random-people-shared-addresses/xml/people.xml +0 -14
- data/examples/random-people/.gitignore +0 -2
- data/examples/random-people/Makefile +0 -20
- data/examples/random-people/batch-load-users.rb +0 -61
- data/examples/random-people/optimise.rb +0 -16
- data/examples/random-people/people.rb +0 -22
- data/examples/random-people/query.rb +0 -73
- data/examples/random-people/query2.rb +0 -73
- data/examples/random-people/random-names.csv +0 -10000
- data/examples/random-people/rawtc.rb +0 -91
- data/examples/random-people/settings.rb +0 -3
- data/examples/random-people/what-to-query-on.rb +0 -80
- data/examples/random-people/xampl-gen.rb +0 -39
- data/examples/random-people/xml/people.xml +0 -11
- data/examples/read-testing/.gitignore +0 -2
- data/examples/read-testing/Makefile +0 -10
- data/examples/read-testing/load.rb +0 -65
- data/examples/read-testing/read.rb +0 -51
- data/examples/read-testing/rrr.rb +0 -88
- data/examples/read-testing/settings.rb +0 -2
- data/examples/read-testing/xampl-gen.rb +0 -38
- data/examples/read-testing/xml/text.xml +0 -8
- data/examples/tokyo-cabinet-experimental/.gitignore +0 -2
- data/examples/tokyo-cabinet-experimental/expt-query.rb +0 -42
- data/examples/tokyo-cabinet-experimental/expt-query2.rb +0 -42
- data/examples/tokyo-cabinet-experimental/expt-query3.rb +0 -41
- data/examples/tokyo-cabinet-experimental/expt-reader.rb +0 -32
- data/examples/tokyo-cabinet-experimental/expt.rb +0 -61
- data/examples/tokyo-cabinet-experimental/xampl-gen.rb +0 -38
- data/examples/tokyo-cabinet-experimental/xml/tcx.xml +0 -6
- data/examples/write-testing/README +0 -4
- data/examples/write-testing/RESULTS.home +0 -33
- data/examples/write-testing/RESULTS.raconteur +0 -33
- data/examples/write-testing/write-speed-test.rb +0 -40
- data/lib/xampl-generator.rb +0 -3
- data/lib/xamplr-generator.rb +0 -9
- data/lib/xamplr/gen-elements.xml +0 -6230
- data/lib/xamplr/gen.elements.xml +0 -108
- data/lib/xamplr/generate-elements.rb +0 -15
- data/lib/xamplr/generator.rb +0 -5
- data/lib/xamplr/graphml-out.rb +0 -451
- data/lib/xamplr/handwritten/example.rb +0 -698
- data/lib/xamplr/handwritten/hand-example.rb +0 -533
- data/lib/xamplr/handwritten/test-handwritten.rb +0 -873
- data/lib/xamplr/my.gen.elements.xml +0 -461
- data/lib/xamplr/obsolete/fsdb.rb +0 -62
- data/lib/xamplr/simpleTemplate/danger.rx +0 -4
- data/lib/xamplr/simpleTemplate/obsolete/input-c.r4 +0 -35
- data/lib/xamplr/simpleTemplate/obsolete/play.r6.txt +0 -12
- data/lib/xamplr/simpleTemplate/obsolete/play_more.r6.txt +0 -20
- data/lib/xamplr/simpleTemplate/obsolete/test001.r5 +0 -8
- data/lib/xamplr/simpleTemplate/obsolete/test002.r5 +0 -13
- data/lib/xamplr/simpleTemplate/obsolete/test003.r5 +0 -37
- data/lib/xamplr/simpleTemplate/old/r6.000.rb +0 -122
- data/lib/xamplr/simpleTemplate/old/r6.001.rb +0 -145
- data/lib/xamplr/simpleTemplate/play.r6 +0 -12
- data/lib/xamplr/simpleTemplate/play_more.r6 +0 -20
- data/lib/xamplr/simpleTemplate/play_noblanks.r6 +0 -21
- data/lib/xamplr/simpleTemplate/playq.r6 +0 -16
- data/lib/xamplr/simpleTemplate/r6.rb +0 -87
- data/lib/xamplr/simpleTemplate/simple-template.rb +0 -75
- data/lib/xamplr/templates/.cvsignore +0 -3
- data/lib/xamplr/templates/child.template +0 -47
- data/lib/xamplr/templates/child_indexed.template +0 -89
- data/lib/xamplr/templates/child_modules.template +0 -5
- data/lib/xamplr/templates/element_classes.template +0 -11
- data/lib/xamplr/templates/element_data.template +0 -283
- data/lib/xamplr/templates/element_empty.template +0 -277
- data/lib/xamplr/templates/element_mixed.template +0 -278
- data/lib/xamplr/templates/element_simple.template +0 -277
- data/lib/xamplr/templates/package.template +0 -38
- data/lib/xamplr/xampl-cl-gen.rb +0 -89
- data/lib/xamplr/xampl-generator.rb +0 -569
- data/lib/xamplr/xampl-hand-generated.rb +0 -1535
- data/lib/xamplr/yEd-sample.graphml +0 -300
- data/lib/xamplr/yuml-out.rb +0 -129
@@ -1,91 +0,0 @@
|
|
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
|
@@ -1,80 +0,0 @@
|
|
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
|
@@ -1,39 +0,0 @@
|
|
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
|
-
$LOAD_PATH.unshift('../../lib/')
|
12
|
-
|
13
|
-
require 'xamplr-generator'
|
14
|
-
|
15
|
-
include XamplGenerator
|
16
|
-
include Xampl
|
17
|
-
|
18
|
-
Xampl.transaction("setup", :in_memory) do
|
19
|
-
directory = File.sjoin(".", "xampl_generated_code")
|
20
|
-
|
21
|
-
options = Xampl.make(Options) do |options|
|
22
|
-
options.new_index_attribute("pid").persisted = true
|
23
|
-
options.new_index_attribute("id")
|
24
|
-
|
25
|
-
options.resolve("http://xampl.com/people", "RandomPeople", "p")
|
26
|
-
end
|
27
|
-
|
28
|
-
filenames = Dir.glob("./xml/**/*.xml")
|
29
|
-
|
30
|
-
#generator = Generator.new
|
31
|
-
generator = Generator.new('generator')
|
32
|
-
generator.go(:options => options,
|
33
|
-
:filenames => filenames,
|
34
|
-
:directory => directory)
|
35
|
-
|
36
|
-
#puts generator.print_elements("./generated-elements.xml")
|
37
|
-
#exit!
|
38
|
-
end
|
39
|
-
end
|
@@ -1,65 +0,0 @@
|
|
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
|
@@ -1,51 +0,0 @@
|
|
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
|
@@ -1,88 +0,0 @@
|
|
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
|
-
0)
|
30
|
-
|
31
|
-
while reader.read do
|
32
|
-
# puts reader.node_type
|
33
|
-
# puts "line: #{ reader.line_number }, column: #{ reader.column_number }"
|
34
|
-
|
35
|
-
case reader.node_type
|
36
|
-
# when LibXML::XML::Reader::TYPE_ATTRIBUTE
|
37
|
-
# puts "attribute"
|
38
|
-
when LibXML::XML::Reader::TYPE_DOCUMENT
|
39
|
-
puts "DOCUMENT"
|
40
|
-
when LibXML::XML::Reader::TYPE_ELEMENT
|
41
|
-
attribute_count = reader.attribute_count
|
42
|
-
puts "element #{ reader.local_name }, ns: #{ reader.namespace_uri }, #attributes: #{ attribute_count }, depth: #{ reader.depth }"
|
43
|
-
if reader.has_attributes? then
|
44
|
-
reader.move_to_first_attribute
|
45
|
-
attribute_count.times do | i |
|
46
|
-
next if reader.namespace_declaration?
|
47
|
-
puts " attr[#{ i }]:: lname: #{ reader.local_name }, ns: #{ reader.namespace_uri } ---> #{ reader.value }"
|
48
|
-
reader.move_to_next_attribute
|
49
|
-
end
|
50
|
-
end
|
51
|
-
|
52
|
-
when LibXML::XML::Reader::TYPE_END_ELEMENT
|
53
|
-
puts "END ELEMENT"
|
54
|
-
when LibXML::XML::Reader::TYPE_TEXT
|
55
|
-
puts "TEXT [[#{ reader.read_string }]]"
|
56
|
-
when LibXML::XML::Reader::TYPE_CDATA
|
57
|
-
puts "CDATA [[#{ reader.read_string }]]"
|
58
|
-
when LibXML::XML::Reader::TYPE_SIGNIFICANT_WHITESPACE
|
59
|
-
puts "SIGNIFICANT white space [[#{ reader.read_string }]]"
|
60
|
-
when LibXML::XML::Reader::TYPE_ENTITY_REFERENCE
|
61
|
-
puts "entity ref"
|
62
|
-
when LibXML::XML::Reader::TYPE_WHITESPACE
|
63
|
-
puts "whitespace"
|
64
|
-
when LibXML::XML::Reader::TYPE_PROCESSING_INSTRUCTION
|
65
|
-
puts "processing instruction"
|
66
|
-
when LibXML::XML::Reader::TYPE_COMMENT
|
67
|
-
puts "comment"
|
68
|
-
when LibXML::XML::Reader::TYPE_DOCUMENT_TYPE
|
69
|
-
puts "doc type"
|
70
|
-
|
71
|
-
when LibXML::XML::Reader::TYPE_XML_DECLARATION
|
72
|
-
puts "xml decl"
|
73
|
-
when LibXML::XML::Reader::TYPE_NONE
|
74
|
-
puts "NONE!!"
|
75
|
-
when LibXML::XML::Reader::TYPE_NOTATION
|
76
|
-
puts "notifiation"
|
77
|
-
when LibXML::XML::Reader::TYPE_DOCUMENT_FRAGMENT
|
78
|
-
puts "doc fragment"
|
79
|
-
when LibXML::XML::Reader::TYPE_ENTITY
|
80
|
-
puts "entity"
|
81
|
-
when LibXML::XML::Reader::TYPE_END_ENTITY
|
82
|
-
puts "
|
83
|
-
end entity"
|
84
|
-
else
|
85
|
-
puts "UNKNOWN: #{reader.node_type}"
|
86
|
-
end
|
87
|
-
|
88
|
-
end
|