libxml-ruby 0.9.6-x86-mswin32-60 → 0.9.7-x86-mswin32-60
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +25 -3
- data/Rakefile +3 -4
- data/ext/libxml/cbg.c +86 -86
- data/ext/libxml/libxml.c +2 -1
- data/ext/libxml/ruby_libxml.h +1 -0
- data/ext/libxml/ruby_xml_document.c +3 -5
- data/ext/libxml/ruby_xml_error.c +37 -9
- data/ext/libxml/ruby_xml_error.h +1 -0
- data/ext/libxml/ruby_xml_namespace.c +158 -158
- data/ext/libxml/ruby_xml_node.c +1324 -1324
- data/ext/libxml/ruby_xml_sax2_handler.c +322 -0
- data/ext/libxml/ruby_xml_sax2_handler.h +12 -0
- data/ext/libxml/ruby_xml_sax_parser.c +12 -47
- data/ext/libxml/ruby_xml_xpath_context.c +354 -354
- data/ext/libxml/ruby_xml_xpointer.c +107 -107
- data/ext/libxml/version.h +2 -2
- data/ext/mingw/libxml_ruby.dll.a +0 -0
- data/ext/mingw/libxml_ruby.so +0 -0
- data/ext/vc/libxml_ruby.vcproj +8 -0
- data/lib/libxml/node.rb +7 -2
- data/lib/libxml/sax_callbacks.rb +78 -90
- data/test/model/atom.xml +10 -1
- data/test/tc_node_text.rb +1 -1
- data/test/tc_reader.rb +86 -86
- data/test/tc_sax_parser.rb +120 -35
- data/test/tc_well_formed.rb +1 -2
- metadata +6 -7
- data/ext/libxml/libxml.c.rej +0 -16
- data/ext/libxml/sax_parser_callbacks.inc +0 -235
- data/test/model/saxtest.xml +0 -5
@@ -1,107 +1,107 @@
|
|
1
|
-
/* $Id: ruby_xml_xpointer.c 650 2008-11-30 03:40:22Z cfis $ */
|
2
|
-
|
3
|
-
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
-
|
5
|
-
#include "ruby_libxml.h"
|
6
|
-
#include "ruby_xml_xpointer.h"
|
7
|
-
|
8
|
-
VALUE cXMLXPointer;
|
9
|
-
|
10
|
-
/*
|
11
|
-
* Document-class: LibXML::XML::XPointer
|
12
|
-
*
|
13
|
-
* The XML::Pointer class provides a standards based API for searching an xml document.
|
14
|
-
* XPointer is based on the XML Path Language (XML::XPath) and is documented
|
15
|
-
* at http://www.w3.org/TR/WD-xptr.
|
16
|
-
*/
|
17
|
-
|
18
|
-
static VALUE rxml_xpointer_point(VALUE class, VALUE rnode, VALUE xptr_str)
|
19
|
-
{
|
20
|
-
#ifdef LIBXML_XPTR_ENABLED
|
21
|
-
xmlNodePtr xnode;
|
22
|
-
xmlXPathContextPtr xctxt;
|
23
|
-
xmlXPathObjectPtr xpop;
|
24
|
-
|
25
|
-
VALUE context;
|
26
|
-
VALUE result;
|
27
|
-
VALUE argv[1];
|
28
|
-
|
29
|
-
Check_Type(xptr_str, T_STRING);
|
30
|
-
if (rb_obj_is_kind_of(rnode, cXMLNode) == Qfalse)
|
31
|
-
rb_raise(rb_eTypeError, "require an XML::Node object");
|
32
|
-
|
33
|
-
Data_Get_Struct(rnode, xmlNode, xnode);
|
34
|
-
|
35
|
-
argv[0] = rb_funcall(rnode, rb_intern("doc"), 0);
|
36
|
-
context = rb_class_new_instance(1, argv, cXMLXPathContext);
|
37
|
-
Data_Get_Struct(context, xmlXPathContext, xctxt);
|
38
|
-
|
39
|
-
xpop = xmlXPtrEval((xmlChar*)StringValuePtr(xptr_str), xctxt);
|
40
|
-
if (!xpop)
|
41
|
-
rxml_raise(&xmlLastError);
|
42
|
-
|
43
|
-
result = rxml_xpath_object_wrap(xpop);
|
44
|
-
rb_iv_set(result, "@context", context);
|
45
|
-
|
46
|
-
return(result);
|
47
|
-
#else
|
48
|
-
rb_warn("libxml was compiled without XPointer support");
|
49
|
-
return (Qfalse);
|
50
|
-
#endif
|
51
|
-
}
|
52
|
-
|
53
|
-
VALUE rxml_xpointer_point2(VALUE node, VALUE xptr_str)
|
54
|
-
{
|
55
|
-
return (rxml_xpointer_point(cXMLXPointer, node, xptr_str));
|
56
|
-
}
|
57
|
-
|
58
|
-
/*
|
59
|
-
* call-seq:
|
60
|
-
* XML::XPointer.range(start_node, end_node) -> xpath
|
61
|
-
*
|
62
|
-
* Create an xpath representing the range between the supplied
|
63
|
-
* start and end node.
|
64
|
-
*/
|
65
|
-
static VALUE rxml_xpointer_range(VALUE class, VALUE rstart, VALUE rend)
|
66
|
-
{
|
67
|
-
#ifdef LIBXML_XPTR_ENABLED
|
68
|
-
xmlNodePtr start, end;
|
69
|
-
VALUE rxxp;
|
70
|
-
xmlXPathObjectPtr xpath;
|
71
|
-
|
72
|
-
if (rb_obj_is_kind_of(rstart, cXMLNode) == Qfalse)
|
73
|
-
rb_raise(rb_eTypeError, "require an XML::Node object as a starting point");
|
74
|
-
if (rb_obj_is_kind_of(rend, cXMLNode) == Qfalse)
|
75
|
-
rb_raise(rb_eTypeError, "require an XML::Node object as an ending point");
|
76
|
-
|
77
|
-
Data_Get_Struct(rstart, xmlNode, start);
|
78
|
-
if (start == NULL)
|
79
|
-
return(Qnil);
|
80
|
-
|
81
|
-
Data_Get_Struct(rend, xmlNode, end);
|
82
|
-
if (end == NULL)
|
83
|
-
return(Qnil);
|
84
|
-
|
85
|
-
xpath = xmlXPtrNewRangeNodes(start, end);
|
86
|
-
if (xpath == NULL)
|
87
|
-
rb_fatal("You shouldn't be able to have this happen");
|
88
|
-
|
89
|
-
rxxp = rxml_xpath_object_wrap(xpath);
|
90
|
-
return(rxxp);
|
91
|
-
#else
|
92
|
-
rb_warn("libxml was compiled without XPointer support");
|
93
|
-
return (Qfalse);
|
94
|
-
#endif
|
95
|
-
}
|
96
|
-
|
97
|
-
// Rdoc needs to know
|
98
|
-
#ifdef RDOC_NEVER_DEFINED
|
99
|
-
mLibXML = rb_define_module("LibXML");
|
100
|
-
mXML = rb_define_module_under(mLibXML, "XML");
|
101
|
-
#endif
|
102
|
-
|
103
|
-
void ruby_init_xml_xpointer(void)
|
104
|
-
{
|
105
|
-
cXMLXPointer = rb_define_class_under(mXML, "XPointer", rb_cObject);
|
106
|
-
rb_define_singleton_method(cXMLXPointer, "range", rxml_xpointer_range, 2);
|
107
|
-
}
|
1
|
+
/* $Id: ruby_xml_xpointer.c 650 2008-11-30 03:40:22Z cfis $ */
|
2
|
+
|
3
|
+
/* Please see the LICENSE file for copyright and distribution information */
|
4
|
+
|
5
|
+
#include "ruby_libxml.h"
|
6
|
+
#include "ruby_xml_xpointer.h"
|
7
|
+
|
8
|
+
VALUE cXMLXPointer;
|
9
|
+
|
10
|
+
/*
|
11
|
+
* Document-class: LibXML::XML::XPointer
|
12
|
+
*
|
13
|
+
* The XML::Pointer class provides a standards based API for searching an xml document.
|
14
|
+
* XPointer is based on the XML Path Language (XML::XPath) and is documented
|
15
|
+
* at http://www.w3.org/TR/WD-xptr.
|
16
|
+
*/
|
17
|
+
|
18
|
+
static VALUE rxml_xpointer_point(VALUE class, VALUE rnode, VALUE xptr_str)
|
19
|
+
{
|
20
|
+
#ifdef LIBXML_XPTR_ENABLED
|
21
|
+
xmlNodePtr xnode;
|
22
|
+
xmlXPathContextPtr xctxt;
|
23
|
+
xmlXPathObjectPtr xpop;
|
24
|
+
|
25
|
+
VALUE context;
|
26
|
+
VALUE result;
|
27
|
+
VALUE argv[1];
|
28
|
+
|
29
|
+
Check_Type(xptr_str, T_STRING);
|
30
|
+
if (rb_obj_is_kind_of(rnode, cXMLNode) == Qfalse)
|
31
|
+
rb_raise(rb_eTypeError, "require an XML::Node object");
|
32
|
+
|
33
|
+
Data_Get_Struct(rnode, xmlNode, xnode);
|
34
|
+
|
35
|
+
argv[0] = rb_funcall(rnode, rb_intern("doc"), 0);
|
36
|
+
context = rb_class_new_instance(1, argv, cXMLXPathContext);
|
37
|
+
Data_Get_Struct(context, xmlXPathContext, xctxt);
|
38
|
+
|
39
|
+
xpop = xmlXPtrEval((xmlChar*)StringValuePtr(xptr_str), xctxt);
|
40
|
+
if (!xpop)
|
41
|
+
rxml_raise(&xmlLastError);
|
42
|
+
|
43
|
+
result = rxml_xpath_object_wrap(xpop);
|
44
|
+
rb_iv_set(result, "@context", context);
|
45
|
+
|
46
|
+
return(result);
|
47
|
+
#else
|
48
|
+
rb_warn("libxml was compiled without XPointer support");
|
49
|
+
return (Qfalse);
|
50
|
+
#endif
|
51
|
+
}
|
52
|
+
|
53
|
+
VALUE rxml_xpointer_point2(VALUE node, VALUE xptr_str)
|
54
|
+
{
|
55
|
+
return (rxml_xpointer_point(cXMLXPointer, node, xptr_str));
|
56
|
+
}
|
57
|
+
|
58
|
+
/*
|
59
|
+
* call-seq:
|
60
|
+
* XML::XPointer.range(start_node, end_node) -> xpath
|
61
|
+
*
|
62
|
+
* Create an xpath representing the range between the supplied
|
63
|
+
* start and end node.
|
64
|
+
*/
|
65
|
+
static VALUE rxml_xpointer_range(VALUE class, VALUE rstart, VALUE rend)
|
66
|
+
{
|
67
|
+
#ifdef LIBXML_XPTR_ENABLED
|
68
|
+
xmlNodePtr start, end;
|
69
|
+
VALUE rxxp;
|
70
|
+
xmlXPathObjectPtr xpath;
|
71
|
+
|
72
|
+
if (rb_obj_is_kind_of(rstart, cXMLNode) == Qfalse)
|
73
|
+
rb_raise(rb_eTypeError, "require an XML::Node object as a starting point");
|
74
|
+
if (rb_obj_is_kind_of(rend, cXMLNode) == Qfalse)
|
75
|
+
rb_raise(rb_eTypeError, "require an XML::Node object as an ending point");
|
76
|
+
|
77
|
+
Data_Get_Struct(rstart, xmlNode, start);
|
78
|
+
if (start == NULL)
|
79
|
+
return(Qnil);
|
80
|
+
|
81
|
+
Data_Get_Struct(rend, xmlNode, end);
|
82
|
+
if (end == NULL)
|
83
|
+
return(Qnil);
|
84
|
+
|
85
|
+
xpath = xmlXPtrNewRangeNodes(start, end);
|
86
|
+
if (xpath == NULL)
|
87
|
+
rb_fatal("You shouldn't be able to have this happen");
|
88
|
+
|
89
|
+
rxxp = rxml_xpath_object_wrap(xpath);
|
90
|
+
return(rxxp);
|
91
|
+
#else
|
92
|
+
rb_warn("libxml was compiled without XPointer support");
|
93
|
+
return (Qfalse);
|
94
|
+
#endif
|
95
|
+
}
|
96
|
+
|
97
|
+
// Rdoc needs to know
|
98
|
+
#ifdef RDOC_NEVER_DEFINED
|
99
|
+
mLibXML = rb_define_module("LibXML");
|
100
|
+
mXML = rb_define_module_under(mLibXML, "XML");
|
101
|
+
#endif
|
102
|
+
|
103
|
+
void ruby_init_xml_xpointer(void)
|
104
|
+
{
|
105
|
+
cXMLXPointer = rb_define_class_under(mXML, "XPointer", rb_cObject);
|
106
|
+
rb_define_singleton_method(cXMLXPointer, "range", rxml_xpointer_range, 2);
|
107
|
+
}
|
data/ext/libxml/version.h
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
/* Don't nuke this block! It is used for automatically updating the
|
2
2
|
* versions below. VERSION = string formatting, VERNUM = numbered
|
3
3
|
* version for inline testing: increment both or none at all.*/
|
4
|
-
#define RUBY_LIBXML_VERSION "0.9.
|
4
|
+
#define RUBY_LIBXML_VERSION "0.9.7"
|
5
5
|
#define RUBY_LIBXML_VERNUM 0
|
6
6
|
#define RUBY_LIBXML_VER_MAJ 0
|
7
7
|
#define RUBY_LIBXML_VER_MIN 9
|
8
|
-
#define RUBY_LIBXML_VER_MIC
|
8
|
+
#define RUBY_LIBXML_VER_MIC 7
|
9
9
|
#define RUBY_LIBXML_VER_PATCH 0
|
data/ext/mingw/libxml_ruby.dll.a
CHANGED
Binary file
|
data/ext/mingw/libxml_ruby.so
CHANGED
Binary file
|
data/ext/vc/libxml_ruby.vcproj
CHANGED
@@ -249,6 +249,10 @@
|
|
249
249
|
RelativePath="..\libxml\ruby_xml_relaxng.c"
|
250
250
|
>
|
251
251
|
</File>
|
252
|
+
<File
|
253
|
+
RelativePath="..\libxml\ruby_xml_sax2_handler.c"
|
254
|
+
>
|
255
|
+
</File>
|
252
256
|
<File
|
253
257
|
RelativePath="..\libxml\ruby_xml_sax_parser.c"
|
254
258
|
>
|
@@ -355,6 +359,10 @@
|
|
355
359
|
RelativePath="..\libxml\ruby_xml_relaxng.h"
|
356
360
|
>
|
357
361
|
</File>
|
362
|
+
<File
|
363
|
+
RelativePath="..\libxml\ruby_xml_sax2_handler.h"
|
364
|
+
>
|
365
|
+
</File>
|
358
366
|
<File
|
359
367
|
RelativePath="..\libxml\ruby_xml_sax_parser.h"
|
360
368
|
>
|
data/lib/libxml/node.rb
CHANGED
@@ -295,8 +295,8 @@ module LibXML
|
|
295
295
|
|
296
296
|
# --- Deprecated Namespaces ---
|
297
297
|
def namespace
|
298
|
-
warn('Node#namespace is deprecated. Use Node#namespaces
|
299
|
-
self.namespaces.
|
298
|
+
warn('Node#namespace is deprecated. Use Node#namespaces instead.')
|
299
|
+
self.namespaces.entries
|
300
300
|
end
|
301
301
|
|
302
302
|
def namespace=(value)
|
@@ -304,6 +304,11 @@ module LibXML
|
|
304
304
|
self.namespaces.namespace = value
|
305
305
|
end
|
306
306
|
|
307
|
+
def namespace_node
|
308
|
+
warn('Node#namespace_node is deprecated. Use Node#namespaces.namespace instead.')
|
309
|
+
self.namespaces.namespace
|
310
|
+
end
|
311
|
+
|
307
312
|
def ns
|
308
313
|
warn('Node#ns is deprecated. Use Node#namespaces.namespace instead.')
|
309
314
|
self.namespaces.namespace
|
data/lib/libxml/sax_callbacks.rb
CHANGED
@@ -2,103 +2,83 @@ module LibXML
|
|
2
2
|
module XML
|
3
3
|
class SaxParser
|
4
4
|
module Callbacks
|
5
|
-
# Called for
|
6
|
-
def
|
7
|
-
end
|
8
|
-
|
9
|
-
# Called for 'is standalone' event.
|
10
|
-
def on_is_standalone
|
11
|
-
end
|
12
|
-
|
13
|
-
# Called for an internal subset notification event.
|
14
|
-
def on_has_internal_subset
|
5
|
+
# Called for a CDATA block event.
|
6
|
+
def on_cdata_block(cdata)
|
15
7
|
end
|
16
8
|
|
17
|
-
# Called for
|
18
|
-
def
|
9
|
+
# Called for a characters event.
|
10
|
+
def on_characters(chars)
|
19
11
|
end
|
20
12
|
|
21
|
-
# Called for a
|
22
|
-
def
|
13
|
+
# Called for a comment event.
|
14
|
+
def on_comment(msg)
|
23
15
|
end
|
24
16
|
|
25
17
|
# Called for a end document event.
|
26
18
|
def on_end_document
|
27
19
|
end
|
28
20
|
|
29
|
-
# Called for a
|
30
|
-
def
|
21
|
+
# Called for a end element event.
|
22
|
+
def on_end_element_ns(name, prefix, uri)
|
31
23
|
end
|
32
24
|
|
33
|
-
# Called for
|
34
|
-
def
|
25
|
+
# Called for parser errors.
|
26
|
+
def on_error(msg)
|
35
27
|
end
|
36
28
|
|
37
|
-
# Called for
|
38
|
-
def
|
29
|
+
# Called for an external subset event.
|
30
|
+
def on_external_subset(name, external_id, system_id)
|
39
31
|
end
|
40
32
|
|
41
|
-
# Called for
|
42
|
-
def
|
33
|
+
# Called for an external subset notification event.
|
34
|
+
def on_has_external_subset
|
43
35
|
end
|
44
36
|
|
45
|
-
# Called for an
|
46
|
-
def
|
37
|
+
# Called for an internal subset notification event.
|
38
|
+
def on_has_internal_subset
|
47
39
|
end
|
48
40
|
|
49
|
-
# Called for
|
50
|
-
def
|
41
|
+
# Called for an internal subset event.
|
42
|
+
def on_internal_subset(name, external_id, system_id)
|
51
43
|
end
|
52
44
|
|
53
|
-
# Called for
|
54
|
-
def
|
45
|
+
# Called for 'is standalone' event.
|
46
|
+
def on_is_standalone
|
55
47
|
end
|
56
48
|
|
57
|
-
# Called for
|
58
|
-
def
|
49
|
+
# Called for an processing instruction event.
|
50
|
+
def on_processing_instruction(target, data)
|
59
51
|
end
|
60
52
|
|
61
|
-
# Called for
|
62
|
-
def
|
53
|
+
# Called for a reference event.
|
54
|
+
def on_reference(name)
|
63
55
|
end
|
64
56
|
|
65
|
-
# Called for a
|
66
|
-
def
|
57
|
+
# Called for a start document event.
|
58
|
+
def on_start_document
|
67
59
|
end
|
68
60
|
|
69
|
-
# Called for
|
70
|
-
def
|
61
|
+
# Called for a start element event.
|
62
|
+
def on_start_element_ns(name, attributes, prefix, uri, namespaces)
|
71
63
|
end
|
72
64
|
end
|
73
65
|
|
74
66
|
module VerboseCallbacks
|
75
|
-
# Called for
|
76
|
-
def
|
77
|
-
STDOUT << "
|
78
|
-
STDOUT.flush
|
79
|
-
end
|
80
|
-
|
81
|
-
# Called for 'is standalone' event.
|
82
|
-
def on_is_standalone
|
83
|
-
STDOUT << "on_is_standalone\n"
|
84
|
-
STDOUT.flush
|
85
|
-
end
|
86
|
-
|
87
|
-
# Called for an internal subset notification event.
|
88
|
-
def on_has_internal_subset
|
89
|
-
STDOUT << "on_has_internal_subset\n"
|
67
|
+
# Called for a CDATA block event.
|
68
|
+
def on_cdata_block(cdata)
|
69
|
+
STDOUT << "on_cdata_block(" << cdata << ")\n"
|
90
70
|
STDOUT.flush
|
91
71
|
end
|
92
72
|
|
93
|
-
# Called for
|
94
|
-
def
|
95
|
-
STDOUT << "
|
73
|
+
# Called for a characters event.
|
74
|
+
def on_characters(chars)
|
75
|
+
STDOUT << "on_characters(" << chars << ")\n"
|
96
76
|
STDOUT.flush
|
97
77
|
end
|
98
78
|
|
99
|
-
# Called for a
|
100
|
-
def
|
101
|
-
STDOUT << "
|
79
|
+
# Called for a comment event.
|
80
|
+
def on_comment(msg)
|
81
|
+
STDOUT << "on_comment(" << msg << ")\n"
|
102
82
|
STDOUT.flush
|
103
83
|
end
|
104
84
|
|
@@ -108,69 +88,77 @@ module LibXML
|
|
108
88
|
STDOUT.flush
|
109
89
|
end
|
110
90
|
|
111
|
-
# Called for a
|
112
|
-
def
|
113
|
-
STDOUT << "
|
91
|
+
# Called for a end element event.
|
92
|
+
def on_end_element_ns(name, prefix, uri)
|
93
|
+
STDOUT << "on_end_element(" << name <<
|
94
|
+
", prefix: " << prefix <<
|
95
|
+
", uri: " << uri <<
|
96
|
+
")\n"
|
114
97
|
STDOUT.flush
|
115
98
|
end
|
116
99
|
|
117
|
-
# Called for
|
118
|
-
def
|
119
|
-
STDOUT << "
|
100
|
+
# Called for parser errors.
|
101
|
+
def on_error(error)
|
102
|
+
STDOUT << "on_error(" << error << ")\n"
|
120
103
|
STDOUT.flush
|
121
104
|
end
|
122
105
|
|
123
|
-
# Called for
|
124
|
-
def
|
125
|
-
STDOUT << "
|
106
|
+
# Called for an external subset event.
|
107
|
+
def on_external_subset(name, external_id, system_id)
|
108
|
+
STDOUT << "on_external_subset(" << name << ", " << external_id << ", " << system_id << ")\n"
|
126
109
|
STDOUT.flush
|
127
110
|
end
|
128
111
|
|
129
|
-
# Called for
|
130
|
-
def
|
131
|
-
STDOUT << "
|
112
|
+
# Called for an external subset notification event.
|
113
|
+
def on_has_external_subset
|
114
|
+
STDOUT << "on_has_internal_subset\n"
|
132
115
|
STDOUT.flush
|
133
116
|
end
|
134
117
|
|
135
|
-
# Called for an
|
136
|
-
def
|
137
|
-
STDOUT << "
|
118
|
+
# Called for an internal subset notification event.
|
119
|
+
def on_has_internal_subset
|
120
|
+
STDOUT << "on_has_internal_subset\n"
|
138
121
|
STDOUT.flush
|
139
122
|
end
|
140
123
|
|
141
|
-
# Called for
|
142
|
-
def
|
143
|
-
STDOUT << "
|
124
|
+
# Called for an internal subset event.
|
125
|
+
def on_internal_subset(name, external_id, system_id)
|
126
|
+
STDOUT << "on_internal_subset(" << name << ", " << external_id << ", " << system_id << ")\n"
|
144
127
|
STDOUT.flush
|
145
128
|
end
|
146
129
|
|
147
|
-
# Called for
|
148
|
-
def
|
149
|
-
STDOUT << "
|
130
|
+
# Called for 'is standalone' event.
|
131
|
+
def on_is_standalone
|
132
|
+
STDOUT << "on_is_standalone\n"
|
150
133
|
STDOUT.flush
|
151
134
|
end
|
152
135
|
|
153
|
-
# Called for
|
154
|
-
def
|
155
|
-
STDOUT << "
|
136
|
+
# Called for an processing instruction event.
|
137
|
+
def on_processing_instruction(target, data)
|
138
|
+
STDOUT << "on_characters(" << target << ", " << data << ")\n"
|
156
139
|
STDOUT.flush
|
157
140
|
end
|
158
141
|
|
159
|
-
# Called for
|
160
|
-
def
|
161
|
-
STDOUT << "
|
142
|
+
# Called for a reference event.
|
143
|
+
def on_reference(name)
|
144
|
+
STDOUT << "on_reference(" << name << ")\n"
|
162
145
|
STDOUT.flush
|
163
146
|
end
|
164
147
|
|
165
|
-
# Called for a
|
166
|
-
def
|
167
|
-
STDOUT << "
|
148
|
+
# Called for a start document event.
|
149
|
+
def on_start_document
|
150
|
+
STDOUT << "on_start_document\n"
|
168
151
|
STDOUT.flush
|
169
152
|
end
|
170
153
|
|
171
|
-
# Called for
|
172
|
-
def
|
173
|
-
STDOUT << "
|
154
|
+
# Called for a start element event.
|
155
|
+
def on_start_element_ns(name, attributes, prefix, uri, namespaces)
|
156
|
+
STDOUT << "on_start_element_ns(" << name <<
|
157
|
+
", attr " << (attributes || Hash.new).inspect <<
|
158
|
+
", prefix: " << prefix <<
|
159
|
+
", uri: " << uri << ")\n" <<
|
160
|
+
", ns " << (namespaces || Hash.new).inspect <<
|
161
|
+
")\n"
|
174
162
|
STDOUT.flush
|
175
163
|
end
|
176
164
|
end
|