libxml-ruby 0.6.0-x86-mswin32-60
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +122 -0
- data/LICENSE +23 -0
- data/README +144 -0
- data/ext/libxml/cbg.c +76 -0
- data/ext/libxml/extconf.rb +308 -0
- data/ext/libxml/libxml.c +62 -0
- data/ext/libxml/ruby_libxml.h +93 -0
- data/ext/libxml/ruby_xml_attr.c +405 -0
- data/ext/libxml/ruby_xml_attr.h +19 -0
- data/ext/libxml/ruby_xml_document.c +1111 -0
- data/ext/libxml/ruby_xml_document.h +27 -0
- data/ext/libxml/ruby_xml_dtd.c +168 -0
- data/ext/libxml/ruby_xml_dtd.h +17 -0
- data/ext/libxml/ruby_xml_html_parser.c +449 -0
- data/ext/libxml/ruby_xml_html_parser.h +29 -0
- data/ext/libxml/ruby_xml_input_cbg.c +158 -0
- data/ext/libxml/ruby_xml_input_cbg.h +20 -0
- data/ext/libxml/ruby_xml_node.c +2410 -0
- data/ext/libxml/ruby_xml_node.h +27 -0
- data/ext/libxml/ruby_xml_node_set.c +170 -0
- data/ext/libxml/ruby_xml_node_set.h +20 -0
- data/ext/libxml/ruby_xml_ns.c +153 -0
- data/ext/libxml/ruby_xml_ns.h +21 -0
- data/ext/libxml/ruby_xml_parser.c +1425 -0
- data/ext/libxml/ruby_xml_parser.h +31 -0
- data/ext/libxml/ruby_xml_parser_context.c +750 -0
- data/ext/libxml/ruby_xml_parser_context.h +22 -0
- data/ext/libxml/ruby_xml_reader.c +900 -0
- data/ext/libxml/ruby_xml_reader.h +14 -0
- data/ext/libxml/ruby_xml_sax_parser.c +485 -0
- data/ext/libxml/ruby_xml_sax_parser.h +56 -0
- data/ext/libxml/ruby_xml_schema.c +146 -0
- data/ext/libxml/ruby_xml_schema.h +16 -0
- data/ext/libxml/ruby_xml_state.c +113 -0
- data/ext/libxml/ruby_xml_state.h +12 -0
- data/ext/libxml/ruby_xml_tree.c +43 -0
- data/ext/libxml/ruby_xml_tree.h +12 -0
- data/ext/libxml/ruby_xml_xinclude.c +20 -0
- data/ext/libxml/ruby_xml_xinclude.h +13 -0
- data/ext/libxml/ruby_xml_xpath.c +243 -0
- data/ext/libxml/ruby_xml_xpath.h +23 -0
- data/ext/libxml/ruby_xml_xpath_context.c +118 -0
- data/ext/libxml/ruby_xml_xpath_context.h +20 -0
- data/ext/libxml/ruby_xml_xpath_object.c +293 -0
- data/ext/libxml/ruby_xml_xpath_object.h +28 -0
- data/ext/libxml/ruby_xml_xpointer.c +100 -0
- data/ext/libxml/ruby_xml_xpointer.h +27 -0
- data/ext/libxml/ruby_xml_xpointer_context.c +21 -0
- data/ext/libxml/ruby_xml_xpointer_context.h +18 -0
- data/ext/libxml/sax_parser_callbacks.inc +213 -0
- data/ext/libxml/version.h +9 -0
- data/lib/libxml.rb +125 -0
- data/lib/libxml_ruby.so +0 -0
- data/lib/xml/libxml.rb +5 -0
- data/mingw/libiconv-2.dll +0 -0
- data/mingw/libxml2-2.dll +0 -0
- data/mingw/libxml_ruby.so +0 -0
- data/mingw/mingw.rake +36 -0
- data/test/dtd-test.rb +24 -0
- data/test/etc_doc_to_s.rb +19 -0
- data/test/ets_copy_bug.rb +21 -0
- data/test/ets_copy_bug2.rb +32 -0
- data/test/ets_copy_bug3.rb +38 -0
- data/test/ets_doc_file.rb +15 -0
- data/test/ets_doc_to_s.rb +21 -0
- data/test/ets_gpx.rb +26 -0
- data/test/ets_node_gc.rb +21 -0
- data/test/ets_test.xml +2 -0
- data/test/ets_tsr.rb +9 -0
- data/test/gc.log +0 -0
- data/test/merge_bug.rb +55 -0
- data/test/schema-test.rb +74 -0
- data/test/tc_well_formed.rb +11 -0
- data/test/tc_xml_document.rb +52 -0
- data/test/tc_xml_document_write.rb +24 -0
- data/test/tc_xml_document_write2.rb +54 -0
- data/test/tc_xml_document_write3.rb +96 -0
- data/test/tc_xml_html_parser.rb +63 -0
- data/test/tc_xml_node.rb +59 -0
- data/test/tc_xml_node2.rb +25 -0
- data/test/tc_xml_node3.rb +27 -0
- data/test/tc_xml_node4.rb +86 -0
- data/test/tc_xml_node5.rb +52 -0
- data/test/tc_xml_node6.rb +27 -0
- data/test/tc_xml_node7.rb +35 -0
- data/test/tc_xml_node8.rb +32 -0
- data/test/tc_xml_node9.rb +32 -0
- data/test/tc_xml_node_copy.rb +40 -0
- data/test/tc_xml_node_set.rb +24 -0
- data/test/tc_xml_node_set2.rb +37 -0
- data/test/tc_xml_node_text.rb +17 -0
- data/test/tc_xml_node_xlink.rb +28 -0
- data/test/tc_xml_parser.rb +190 -0
- data/test/tc_xml_parser2.rb +16 -0
- data/test/tc_xml_parser3.rb +23 -0
- data/test/tc_xml_parser4.rb +33 -0
- data/test/tc_xml_parser5.rb +27 -0
- data/test/tc_xml_parser6.rb +23 -0
- data/test/tc_xml_parser7.rb +28 -0
- data/test/tc_xml_parser8.rb +32 -0
- data/test/tc_xml_parser9.rb +11 -0
- data/test/tc_xml_parser_context.rb +88 -0
- data/test/tc_xml_reader.rb +112 -0
- data/test/tc_xml_sax_parser.rb +104 -0
- data/test/tc_xml_sax_parser2.rb +51 -0
- data/test/tc_xml_xinclude.rb +30 -0
- data/test/tc_xml_xpath.rb +38 -0
- data/test/tc_xml_xpath2.rb +14 -0
- data/test/tc_xml_xpointer.rb +78 -0
- data/vc/libxml.sln +20 -0
- data/vc/libxml.vcproj +389 -0
- data/work/Rakefile +247 -0
- data/work/task/make +26 -0
- data/work/task/memory +37 -0
- data/work/task/rdoc +39 -0
- data/work/task/setup +1616 -0
- data/work/task/test +29 -0
- data/work/test/ets_runner.rb +33 -0
- data/work/test/libxml_test.rb +3 -0
- data/work/test/runner.rb +0 -0
- data/work/test/runner_ets.rb +33 -0
- data/work/vc/debug/libxml.exp +0 -0
- data/work/vc/debug/libxml.ilk +0 -0
- data/work/vc/debug/libxml.lib +0 -0
- data/work/vc/debug/libxml.pdb +0 -0
- data/work/vc/debug/libxml.so +0 -0
- metadata +224 -0
data/lib/libxml_ruby.so
ADDED
Binary file
|
data/lib/xml/libxml.rb
ADDED
Binary file
|
data/mingw/libxml2-2.dll
ADDED
Binary file
|
Binary file
|
data/mingw/mingw.rake
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
# We can't use Ruby's standard build procedures
|
2
|
+
# on Windows because the Ruby executable is
|
3
|
+
# built with VC++ while here we want to build
|
4
|
+
# with MingW. So just roll our own...
|
5
|
+
|
6
|
+
require 'rake/clean'
|
7
|
+
require 'rbconfig'
|
8
|
+
|
9
|
+
RUBY_INCLUDE_DIR = Config::CONFIG["archdir"]
|
10
|
+
RUBY_BIN_DIR = Config::CONFIG["bindir"]
|
11
|
+
RUBY_LIB_DIR = Config::CONFIG["libdir"]
|
12
|
+
RUBY_SHARED_LIB = Config::CONFIG["LIBRUBY"]
|
13
|
+
RUBY_SHARED_DLL = RUBY_SHARED_LIB.gsub(/lib$/, 'dll')
|
14
|
+
|
15
|
+
CLEAN.include('*.o')
|
16
|
+
CLOBBER.include('libxml.so')
|
17
|
+
|
18
|
+
task :default => "libxml"
|
19
|
+
|
20
|
+
SRC = FileList['../ext/libxml/*.c']
|
21
|
+
OBJ = SRC.collect do |file_name|
|
22
|
+
File.basename(file_name).ext('o')
|
23
|
+
end
|
24
|
+
|
25
|
+
SRC.each do |srcfile|
|
26
|
+
objfile = File.basename(srcfile).ext('o')
|
27
|
+
file objfile => srcfile do
|
28
|
+
command = "gcc -c -fPIC -O2 -Wall -o #{objfile} -I/usr/local/include #{srcfile} -I#{RUBY_INCLUDE_DIR}"
|
29
|
+
sh "sh -c '#{command}'"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
file "libxml" => OBJ do
|
34
|
+
command = "libtool --mode=link gcc -shared -o libxml_ruby.so -L/usr/local/lib -lxml2 #{OBJ} #{RUBY_BIN_DIR}/#{RUBY_SHARED_DLL}"
|
35
|
+
sh "sh -c '#{command}'"
|
36
|
+
end
|
data/test/dtd-test.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "libxml"
|
2
|
+
|
3
|
+
xp = XML::Parser.new
|
4
|
+
xp.string = '<?xml version="1.0" encoding="utf-8"?>
|
5
|
+
<root><head a="ee" id="1">ass<buzz/></head><descr>really big ass</descr></root>'
|
6
|
+
|
7
|
+
doc = xp.parse
|
8
|
+
|
9
|
+
dtd = XML::Dtd.new('
|
10
|
+
<!ELEMENT root (head, descr)>
|
11
|
+
<!ELEMENT head (#PCDATA)>
|
12
|
+
<!ATTLIST head
|
13
|
+
id NMTOKEN #REQUIRED
|
14
|
+
a CDATA #IMPLIED
|
15
|
+
>
|
16
|
+
<!ELEMENT descr (#PCDATA)>
|
17
|
+
')
|
18
|
+
|
19
|
+
if doc.validate(dtd) { |message, error| puts "#{error ? 'error' : 'warning'} : #{message}" }
|
20
|
+
puts "validation passed"
|
21
|
+
else
|
22
|
+
puts "validation failed"
|
23
|
+
end
|
24
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
require 'libxml'
|
2
|
+
|
3
|
+
1.times do |count|
|
4
|
+
|
5
|
+
xml_doc = XML::Document.new()
|
6
|
+
xml_doc.encoding = "UTF-8"
|
7
|
+
xml_doc.root = XML::Node.new("Request")
|
8
|
+
|
9
|
+
1000.times do |index|
|
10
|
+
xml_doc.root << node = XML::Node.new("row")
|
11
|
+
node["user_id"] = index.to_s
|
12
|
+
node << "600445"
|
13
|
+
end
|
14
|
+
|
15
|
+
xml_str = xml_doc.to_s
|
16
|
+
print "\r#{count}"
|
17
|
+
$stdout.flush
|
18
|
+
end
|
19
|
+
puts "\n"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'libxml'
|
2
|
+
|
3
|
+
def test( doc2 )
|
4
|
+
doc = XML::Document.new('1.0')
|
5
|
+
doc.root = XML::Node.new("ccc")
|
6
|
+
doc.root['aaa'] = 'aaa'
|
7
|
+
doc.root.child_add(doc2.root) # BUG!
|
8
|
+
doc.root << doc2.root.copy(true)
|
9
|
+
return doc
|
10
|
+
end
|
11
|
+
|
12
|
+
def test2
|
13
|
+
doc2 = XML::Document.new('1.0')
|
14
|
+
doc2.root = XML::Node.new("aaa")
|
15
|
+
test( doc2 )
|
16
|
+
end
|
17
|
+
|
18
|
+
1000.times { |i|
|
19
|
+
print "\r#{i}"; $stdout.flush
|
20
|
+
test2
|
21
|
+
}
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'libxml'
|
2
|
+
|
3
|
+
$FAILS = []
|
4
|
+
|
5
|
+
def test( doc, doc2, iter )
|
6
|
+
doc.root = XML::Node.new("ccc")
|
7
|
+
iter.times { |i|
|
8
|
+
doc.root.child_add(doc2.root)
|
9
|
+
# doc.root << doc2.root.copy(true)
|
10
|
+
}
|
11
|
+
return doc
|
12
|
+
end
|
13
|
+
|
14
|
+
def test2(iter)
|
15
|
+
doc = XML::Document.new('1.0')
|
16
|
+
doc2 = XML::Document.new('1.0')
|
17
|
+
doc2.root = XML::Node.new("aaa")
|
18
|
+
ret = test( doc, doc2, iter )
|
19
|
+
li=ret.find('aaa').length
|
20
|
+
$FAILS << [li,iter] unless li == iter
|
21
|
+
end
|
22
|
+
|
23
|
+
test2(5)
|
24
|
+
1000.times do |i|
|
25
|
+
test2(i)
|
26
|
+
print "\r#{i}"; $stdout.flush
|
27
|
+
end
|
28
|
+
|
29
|
+
puts "\n#{$FAILS.length} failures"
|
30
|
+
p $FAILS
|
31
|
+
|
32
|
+
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'libxml'
|
2
|
+
|
3
|
+
str = <<-STR
|
4
|
+
<html>
|
5
|
+
<body>
|
6
|
+
<div class="textarea" id="t1"
|
7
|
+
style="STATIC">werwerwerwerwer </div>
|
8
|
+
<div class="textarea" id="t2" style="STATIC">
|
9
|
+
Quisque et diam dapibus nisi bibendum blandit.
|
10
|
+
</div>
|
11
|
+
<div class="textarea" id="t3" style="STATIC">
|
12
|
+
<p>aaaaaaaaa</p>
|
13
|
+
</div>
|
14
|
+
</body>
|
15
|
+
</html>
|
16
|
+
STR
|
17
|
+
|
18
|
+
XML::Parser.default_keep_blanks = false
|
19
|
+
xp = XML::Parser.new
|
20
|
+
xp.string = str
|
21
|
+
doc = xp.parse
|
22
|
+
|
23
|
+
xpath = "//div[@id='t1']"
|
24
|
+
div1 = doc.find(xpath).to_a[0]
|
25
|
+
printf "xxx div1: #{div1}\n"
|
26
|
+
|
27
|
+
xpath = "//div[@id='t2']"
|
28
|
+
div2 = doc.find(xpath).to_a[0]
|
29
|
+
printf "xxx div2: #{div2}\n"
|
30
|
+
|
31
|
+
|
32
|
+
div2.each do |child|
|
33
|
+
#c = child.clone
|
34
|
+
c = child.copy(false)
|
35
|
+
div1.child_add(c)
|
36
|
+
end
|
37
|
+
|
38
|
+
printf "xxx root: #{doc.root}\n"
|
@@ -0,0 +1,15 @@
|
|
1
|
+
require 'libxml'
|
2
|
+
|
3
|
+
# This is related to bug 8337, complaint is on amd64/fbsd
|
4
|
+
# unknown if it happens on other amd64/os combos
|
5
|
+
|
6
|
+
Process.setrlimit(Process::RLIMIT_NOFILE,10005)
|
7
|
+
|
8
|
+
(1..10000).each{|time|
|
9
|
+
XML::Document.file(File.join(File.dirname(__FILE__),'ets_test.xml'))
|
10
|
+
if time % 100 == 0
|
11
|
+
print "\r#{time}"
|
12
|
+
$stdout.flush
|
13
|
+
end
|
14
|
+
}
|
15
|
+
puts "\n"
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'libxml'
|
2
|
+
|
3
|
+
1000.times do |count|
|
4
|
+
|
5
|
+
xml_doc = XML::Document.new()
|
6
|
+
xml_doc.encoding = "UTF-8"
|
7
|
+
xml_doc.root = XML::Node.new("Request")
|
8
|
+
|
9
|
+
1000.times do |index|
|
10
|
+
|
11
|
+
xml_doc.root << node = XML::Node.new("row")
|
12
|
+
node["user_id"] = index.to_s
|
13
|
+
node << "600445"
|
14
|
+
|
15
|
+
end
|
16
|
+
|
17
|
+
xml_str = xml_doc.to_s
|
18
|
+
print "\r#{count}"
|
19
|
+
$stdout.flush
|
20
|
+
end
|
21
|
+
puts "\n"
|
data/test/ets_gpx.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'libxml'
|
2
|
+
|
3
|
+
100.times do
|
4
|
+
doc = XML::Document.new
|
5
|
+
doc.encoding = 'UTF-8'
|
6
|
+
|
7
|
+
root = XML::Node.new 'gpx'
|
8
|
+
root['version'] = '1.0'
|
9
|
+
root['creator'] = 'OpenStreetMap.org'
|
10
|
+
root['xmlns'] = "http://www.topografix.com/GPX/1/0/"
|
11
|
+
|
12
|
+
doc.root = root
|
13
|
+
|
14
|
+
track = XML::Node.new 'trk'
|
15
|
+
doc.root << track
|
16
|
+
|
17
|
+
trkseg = XML::Node.new 'trkseg'
|
18
|
+
track << trkseg
|
19
|
+
|
20
|
+
1.upto(10000) do |n|
|
21
|
+
trkpt = XML::Node.new 'trkpt'
|
22
|
+
trkpt['lat'] = n.to_s
|
23
|
+
trkpt['lon'] = n.to_s
|
24
|
+
trkseg << trkpt
|
25
|
+
end
|
26
|
+
end
|
data/test/ets_node_gc.rb
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'libxml'
|
2
|
+
|
3
|
+
# test of bug 13310, clears MEM2
|
4
|
+
|
5
|
+
include GC
|
6
|
+
|
7
|
+
inner = XML::Node.new('inner')
|
8
|
+
save = nil
|
9
|
+
1.times do
|
10
|
+
outer = XML::Node.new('outer')
|
11
|
+
outer.child = inner
|
12
|
+
1.times do
|
13
|
+
doc = XML::Document.new
|
14
|
+
doc.root = outer
|
15
|
+
# Uncomment the following line and it won't crash
|
16
|
+
# save = doc
|
17
|
+
end
|
18
|
+
garbage_collect
|
19
|
+
end
|
20
|
+
garbage_collect
|
21
|
+
puts inner
|
data/test/ets_test.xml
ADDED
data/test/ets_tsr.rb
ADDED
data/test/gc.log
ADDED
File without changes
|
data/test/merge_bug.rb
ADDED
@@ -0,0 +1,55 @@
|
|
1
|
+
#!/usr/local/bin/ruby
|
2
|
+
|
3
|
+
require 'libxml'
|
4
|
+
|
5
|
+
class XML::Node
|
6
|
+
def first_child_element
|
7
|
+
result = nil
|
8
|
+
if self.children?
|
9
|
+
self.each_child{|node_child| result = node_child if ((result.nil?) && node_child.element?) }
|
10
|
+
end
|
11
|
+
result
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
#
|
16
|
+
# Method which generates crash
|
17
|
+
#
|
18
|
+
def merge(forms)
|
19
|
+
starting_form = forms.shift
|
20
|
+
forms.inject(starting_form) do |master_form,form|
|
21
|
+
master_form.find("//body").first << form.find("//body").first.first_child_element
|
22
|
+
master_form
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
#
|
27
|
+
# Run
|
28
|
+
# Must tell it how many times to merge a document
|
29
|
+
# On my linux box, it takes about 350 to crash it
|
30
|
+
# On my OS X box, it takes about 150
|
31
|
+
#
|
32
|
+
|
33
|
+
if (ARGV[0].to_i > 0)
|
34
|
+
count = ARGV[0].to_i
|
35
|
+
else
|
36
|
+
count = 500
|
37
|
+
end
|
38
|
+
|
39
|
+
|
40
|
+
merge_list = []
|
41
|
+
|
42
|
+
count.times do
|
43
|
+
merge_list << XML::Parser.string(File.read(File.join(File.dirname(__FILE__), 'model', 'merge_bug_data.xml'))).parse
|
44
|
+
end
|
45
|
+
|
46
|
+
result = merge(merge_list)
|
47
|
+
puts "Merged!"
|
48
|
+
|
49
|
+
#File.open(File.join(File.dirname(__FILE__), 'model', '/generated_form.xml'), "w") do |f|
|
50
|
+
# puts "Trying to write to file"
|
51
|
+
# f << result
|
52
|
+
# puts "After trying to write to file"
|
53
|
+
#end
|
54
|
+
|
55
|
+
puts "nothing left to do but print this message"
|
data/test/schema-test.rb
ADDED
@@ -0,0 +1,74 @@
|
|
1
|
+
require "libxml"
|
2
|
+
|
3
|
+
xp = XML::Parser.new
|
4
|
+
xp.string = '<?xml version="1.0" encoding="utf-8"?>
|
5
|
+
|
6
|
+
<shiporder orderid="889923"
|
7
|
+
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
8
|
+
xsi:noNamespaceSchemaLocation="shiporder.xsd">
|
9
|
+
<orderperson>John Smith</orderperson>
|
10
|
+
<shipto>
|
11
|
+
<name>Ola Nordmann</name>
|
12
|
+
<address>Langgt 23</address>
|
13
|
+
<city>4000 Stavanger</city>
|
14
|
+
<country>Norway</country>
|
15
|
+
</shipto>
|
16
|
+
<item>
|
17
|
+
<title>Empire Burlesque</title>
|
18
|
+
<note>Special Edition</note>
|
19
|
+
<quantity>1</quantity>
|
20
|
+
<price>10.90</price>
|
21
|
+
</item>
|
22
|
+
<item>
|
23
|
+
<title>Hide your heart</title>
|
24
|
+
<quantity>1</quantity>
|
25
|
+
<price>9.90</price>
|
26
|
+
</item>
|
27
|
+
</shiporder>
|
28
|
+
'
|
29
|
+
|
30
|
+
doc = xp.parse
|
31
|
+
|
32
|
+
schema = XML::Schema.from_string('<?xml version="1.0" encoding="ISO-8859-1" ?>
|
33
|
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
|
34
|
+
|
35
|
+
<xs:element name="shiporder">
|
36
|
+
<xs:complexType>
|
37
|
+
<xs:sequence>
|
38
|
+
<xs:element name="orderperson" type="xs:string"/>
|
39
|
+
<xs:element name="shipto">
|
40
|
+
<xs:complexType>
|
41
|
+
<xs:sequence>
|
42
|
+
<xs:element name="name" type="xs:string"/>
|
43
|
+
<xs:element name="address" type="xs:string"/>
|
44
|
+
<xs:element name="city" type="xs:string"/>
|
45
|
+
<xs:element name="country" type="xs:string"/>
|
46
|
+
</xs:sequence>
|
47
|
+
</xs:complexType>
|
48
|
+
</xs:element>
|
49
|
+
<xs:element name="item" maxOccurs="unbounded">
|
50
|
+
<xs:complexType>
|
51
|
+
<xs:sequence>
|
52
|
+
<xs:element name="title" type="xs:string"/>
|
53
|
+
<xs:element name="note" type="xs:string" minOccurs="0"/>
|
54
|
+
<xs:element name="quantity" type="xs:positiveInteger"/>
|
55
|
+
<xs:element name="price" type="xs:decimal"/>
|
56
|
+
</xs:sequence>
|
57
|
+
</xs:complexType>
|
58
|
+
</xs:element>
|
59
|
+
</xs:sequence>
|
60
|
+
<xs:attribute name="orderid" type="xs:string" use="required"/>
|
61
|
+
</xs:complexType>
|
62
|
+
</xs:element>
|
63
|
+
|
64
|
+
</xs:schema>
|
65
|
+
')
|
66
|
+
|
67
|
+
p schema
|
68
|
+
|
69
|
+
if doc.validate_schema(schema) { |message, error| puts "#{error ? 'error' : 'warning'} : #{message}" }
|
70
|
+
puts "validation passed"
|
71
|
+
else
|
72
|
+
puts "validation failed"
|
73
|
+
end
|
74
|
+
|