libxml-ruby 3.2.2-x64-mingw-ucrt
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 +7 -0
- data/HISTORY +848 -0
- data/LICENSE +21 -0
- data/MANIFEST +166 -0
- data/README.rdoc +217 -0
- data/Rakefile +99 -0
- data/ext/libxml/extconf.rb +61 -0
- data/ext/libxml/libxml.c +80 -0
- data/ext/libxml/libxml_ruby.def +35 -0
- data/ext/libxml/ruby_libxml.h +67 -0
- data/ext/libxml/ruby_xml.c +933 -0
- data/ext/libxml/ruby_xml.h +10 -0
- data/ext/libxml/ruby_xml_attr.c +333 -0
- data/ext/libxml/ruby_xml_attr.h +12 -0
- data/ext/libxml/ruby_xml_attr_decl.c +153 -0
- data/ext/libxml/ruby_xml_attr_decl.h +11 -0
- data/ext/libxml/ruby_xml_attributes.c +275 -0
- data/ext/libxml/ruby_xml_attributes.h +15 -0
- data/ext/libxml/ruby_xml_cbg.c +85 -0
- data/ext/libxml/ruby_xml_document.c +1123 -0
- data/ext/libxml/ruby_xml_document.h +11 -0
- data/ext/libxml/ruby_xml_dtd.c +248 -0
- data/ext/libxml/ruby_xml_dtd.h +9 -0
- data/ext/libxml/ruby_xml_encoding.c +250 -0
- data/ext/libxml/ruby_xml_encoding.h +16 -0
- data/ext/libxml/ruby_xml_error.c +996 -0
- data/ext/libxml/ruby_xml_error.h +12 -0
- data/ext/libxml/ruby_xml_html_parser.c +89 -0
- data/ext/libxml/ruby_xml_html_parser.h +10 -0
- data/ext/libxml/ruby_xml_html_parser_context.c +337 -0
- data/ext/libxml/ruby_xml_html_parser_context.h +10 -0
- data/ext/libxml/ruby_xml_html_parser_options.c +46 -0
- data/ext/libxml/ruby_xml_html_parser_options.h +10 -0
- data/ext/libxml/ruby_xml_input_cbg.c +191 -0
- data/ext/libxml/ruby_xml_input_cbg.h +20 -0
- data/ext/libxml/ruby_xml_io.c +47 -0
- data/ext/libxml/ruby_xml_io.h +10 -0
- data/ext/libxml/ruby_xml_namespace.c +153 -0
- data/ext/libxml/ruby_xml_namespace.h +10 -0
- data/ext/libxml/ruby_xml_namespaces.c +293 -0
- data/ext/libxml/ruby_xml_namespaces.h +9 -0
- data/ext/libxml/ruby_xml_node.c +1402 -0
- data/ext/libxml/ruby_xml_node.h +13 -0
- data/ext/libxml/ruby_xml_parser.c +91 -0
- data/ext/libxml/ruby_xml_parser.h +12 -0
- data/ext/libxml/ruby_xml_parser_context.c +999 -0
- data/ext/libxml/ruby_xml_parser_context.h +10 -0
- data/ext/libxml/ruby_xml_parser_options.c +66 -0
- data/ext/libxml/ruby_xml_parser_options.h +12 -0
- data/ext/libxml/ruby_xml_reader.c +1239 -0
- data/ext/libxml/ruby_xml_reader.h +17 -0
- data/ext/libxml/ruby_xml_relaxng.c +110 -0
- data/ext/libxml/ruby_xml_relaxng.h +10 -0
- data/ext/libxml/ruby_xml_sax2_handler.c +326 -0
- data/ext/libxml/ruby_xml_sax2_handler.h +10 -0
- data/ext/libxml/ruby_xml_sax_parser.c +116 -0
- data/ext/libxml/ruby_xml_sax_parser.h +10 -0
- data/ext/libxml/ruby_xml_schema.c +278 -0
- data/ext/libxml/ruby_xml_schema.h +809 -0
- data/ext/libxml/ruby_xml_schema_attribute.c +109 -0
- data/ext/libxml/ruby_xml_schema_attribute.h +15 -0
- data/ext/libxml/ruby_xml_schema_element.c +95 -0
- data/ext/libxml/ruby_xml_schema_element.h +14 -0
- data/ext/libxml/ruby_xml_schema_facet.c +52 -0
- data/ext/libxml/ruby_xml_schema_facet.h +13 -0
- data/ext/libxml/ruby_xml_schema_type.c +232 -0
- data/ext/libxml/ruby_xml_schema_type.h +9 -0
- data/ext/libxml/ruby_xml_version.h +9 -0
- data/ext/libxml/ruby_xml_writer.c +1133 -0
- data/ext/libxml/ruby_xml_writer.h +10 -0
- data/ext/libxml/ruby_xml_xinclude.c +16 -0
- data/ext/libxml/ruby_xml_xinclude.h +11 -0
- data/ext/libxml/ruby_xml_xpath.c +194 -0
- data/ext/libxml/ruby_xml_xpath.h +13 -0
- data/ext/libxml/ruby_xml_xpath_context.c +360 -0
- data/ext/libxml/ruby_xml_xpath_context.h +9 -0
- data/ext/libxml/ruby_xml_xpath_expression.c +81 -0
- data/ext/libxml/ruby_xml_xpath_expression.h +10 -0
- data/ext/libxml/ruby_xml_xpath_object.c +338 -0
- data/ext/libxml/ruby_xml_xpath_object.h +17 -0
- data/ext/libxml/ruby_xml_xpointer.c +99 -0
- data/ext/libxml/ruby_xml_xpointer.h +11 -0
- data/ext/vc/libxml_ruby.sln +28 -0
- data/lib/3.1/libxml_ruby.so +0 -0
- data/lib/libxml/attr.rb +123 -0
- data/lib/libxml/attr_decl.rb +80 -0
- data/lib/libxml/attributes.rb +14 -0
- data/lib/libxml/document.rb +194 -0
- data/lib/libxml/error.rb +95 -0
- data/lib/libxml/hpricot.rb +78 -0
- data/lib/libxml/html_parser.rb +96 -0
- data/lib/libxml/namespace.rb +62 -0
- data/lib/libxml/namespaces.rb +38 -0
- data/lib/libxml/node.rb +323 -0
- data/lib/libxml/parser.rb +101 -0
- data/lib/libxml/sax_callbacks.rb +180 -0
- data/lib/libxml/sax_parser.rb +41 -0
- data/lib/libxml/schema/attribute.rb +19 -0
- data/lib/libxml/schema/element.rb +19 -0
- data/lib/libxml/schema/type.rb +21 -0
- data/lib/libxml/schema.rb +48 -0
- data/lib/libxml/tree.rb +29 -0
- data/lib/libxml-ruby.rb +30 -0
- data/lib/libxml.rb +5 -0
- data/lib/xml/libxml.rb +10 -0
- data/lib/xml.rb +14 -0
- data/libxml-ruby.gemspec +48 -0
- data/script/benchmark/depixelate +634 -0
- data/script/benchmark/hamlet.xml +9055 -0
- data/script/benchmark/parsecount +170 -0
- data/script/benchmark/sock_entries.xml +507 -0
- data/script/benchmark/throughput +41 -0
- data/script/test +6 -0
- data/setup.rb +1584 -0
- data/test/c14n/given/doc.dtd +1 -0
- data/test/c14n/given/example-1.xml +14 -0
- data/test/c14n/given/example-2.xml +11 -0
- data/test/c14n/given/example-3.xml +18 -0
- data/test/c14n/given/example-4.xml +9 -0
- data/test/c14n/given/example-5.xml +12 -0
- data/test/c14n/given/example-6.xml +2 -0
- data/test/c14n/given/example-7.xml +11 -0
- data/test/c14n/given/example-8.xml +11 -0
- data/test/c14n/given/example-8.xpath +10 -0
- data/test/c14n/given/world.txt +1 -0
- data/test/c14n/result/1-1-without-comments/example-1 +4 -0
- data/test/c14n/result/1-1-without-comments/example-2 +11 -0
- data/test/c14n/result/1-1-without-comments/example-3 +14 -0
- data/test/c14n/result/1-1-without-comments/example-4 +9 -0
- data/test/c14n/result/1-1-without-comments/example-5 +3 -0
- data/test/c14n/result/1-1-without-comments/example-6 +1 -0
- data/test/c14n/result/1-1-without-comments/example-7 +1 -0
- data/test/c14n/result/1-1-without-comments/example-8 +1 -0
- data/test/c14n/result/with-comments/example-1 +6 -0
- data/test/c14n/result/with-comments/example-2 +11 -0
- data/test/c14n/result/with-comments/example-3 +14 -0
- data/test/c14n/result/with-comments/example-4 +9 -0
- data/test/c14n/result/with-comments/example-5 +4 -0
- data/test/c14n/result/with-comments/example-6 +1 -0
- data/test/c14n/result/with-comments/example-7 +1 -0
- data/test/c14n/result/without-comments/example-1 +4 -0
- data/test/c14n/result/without-comments/example-2 +11 -0
- data/test/c14n/result/without-comments/example-3 +14 -0
- data/test/c14n/result/without-comments/example-4 +9 -0
- data/test/c14n/result/without-comments/example-5 +3 -0
- data/test/c14n/result/without-comments/example-6 +1 -0
- data/test/c14n/result/without-comments/example-7 +1 -0
- data/test/model/atom.xml +13 -0
- data/test/model/bands.iso-8859-1.xml +5 -0
- data/test/model/bands.utf-8.xml +5 -0
- data/test/model/bands.xml +5 -0
- data/test/model/books.xml +154 -0
- data/test/model/cwm_1_0.xml +11336 -0
- data/test/model/merge_bug_data.xml +58 -0
- data/test/model/ruby-lang.html +238 -0
- data/test/model/rubynet.xml +79 -0
- data/test/model/rubynet_project +1 -0
- data/test/model/shiporder.rnc +28 -0
- data/test/model/shiporder.rng +86 -0
- data/test/model/shiporder.xml +23 -0
- data/test/model/shiporder.xsd +40 -0
- data/test/model/soap.xml +27 -0
- data/test/model/xinclude.xml +5 -0
- data/test/test_attr.rb +181 -0
- data/test/test_attr_decl.rb +132 -0
- data/test/test_attributes.rb +136 -0
- data/test/test_canonicalize.rb +120 -0
- data/test/test_deprecated_require.rb +12 -0
- data/test/test_document.rb +132 -0
- data/test/test_document_write.rb +146 -0
- data/test/test_dtd.rb +129 -0
- data/test/test_encoding.rb +129 -0
- data/test/test_encoding_sax.rb +115 -0
- data/test/test_error.rb +178 -0
- data/test/test_helper.rb +9 -0
- data/test/test_html_parser.rb +162 -0
- data/test/test_html_parser_context.rb +23 -0
- data/test/test_namespace.rb +60 -0
- data/test/test_namespaces.rb +200 -0
- data/test/test_node.rb +237 -0
- data/test/test_node_cdata.rb +50 -0
- data/test/test_node_comment.rb +32 -0
- data/test/test_node_copy.rb +40 -0
- data/test/test_node_edit.rb +158 -0
- data/test/test_node_pi.rb +37 -0
- data/test/test_node_text.rb +69 -0
- data/test/test_node_write.rb +97 -0
- data/test/test_node_xlink.rb +28 -0
- data/test/test_parser.rb +324 -0
- data/test/test_parser_context.rb +198 -0
- data/test/test_properties.rb +38 -0
- data/test/test_reader.rb +364 -0
- data/test/test_relaxng.rb +53 -0
- data/test/test_sax_parser.rb +326 -0
- data/test/test_schema.rb +168 -0
- data/test/test_suite.rb +48 -0
- data/test/test_traversal.rb +152 -0
- data/test/test_writer.rb +468 -0
- data/test/test_xinclude.rb +20 -0
- data/test/test_xml.rb +263 -0
- data/test/test_xpath.rb +244 -0
- data/test/test_xpath_context.rb +88 -0
- data/test/test_xpath_expression.rb +37 -0
- data/test/test_xpointer.rb +72 -0
- metadata +325 -0
@@ -0,0 +1,194 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module LibXML
|
4
|
+
module XML
|
5
|
+
class Document
|
6
|
+
# call-seq:
|
7
|
+
# XML::Document.document(document) -> XML::Document
|
8
|
+
#
|
9
|
+
# Creates a new document based on the specified document.
|
10
|
+
#
|
11
|
+
# Parameters:
|
12
|
+
#
|
13
|
+
# document - A preparsed document.
|
14
|
+
def self.document(value)
|
15
|
+
Parser.document(value).parse
|
16
|
+
end
|
17
|
+
|
18
|
+
# call-seq:
|
19
|
+
# XML::Document.file(path) -> XML::Document
|
20
|
+
# XML::Document.file(path, :encoding => XML::Encoding::UTF_8,
|
21
|
+
# :options => XML::Parser::Options::NOENT) -> XML::Document
|
22
|
+
#
|
23
|
+
# Creates a new document from the specified file or uri.
|
24
|
+
#
|
25
|
+
# You may provide an optional hash table to control how the
|
26
|
+
# parsing is performed. Valid options are:
|
27
|
+
#
|
28
|
+
# encoding - The document encoding, defaults to nil. Valid values
|
29
|
+
# are the encoding constants defined on XML::Encoding.
|
30
|
+
# options - Parser options. Valid values are the constants defined on
|
31
|
+
# XML::Parser::Options. Mutliple options can be combined
|
32
|
+
# by using Bitwise OR (|).
|
33
|
+
def self.file(value, options = {})
|
34
|
+
Parser.file(value, options).parse
|
35
|
+
end
|
36
|
+
|
37
|
+
# call-seq:
|
38
|
+
# XML::Document.io(io) -> XML::Document
|
39
|
+
# XML::Document.io(io, :encoding => XML::Encoding::UTF_8,
|
40
|
+
# :options => XML::Parser::Options::NOENT
|
41
|
+
# :base_uri="http://libxml.org") -> XML::Document
|
42
|
+
#
|
43
|
+
# Creates a new document from the specified io object.
|
44
|
+
#
|
45
|
+
# Parameters:
|
46
|
+
#
|
47
|
+
# io - io object that contains the xml to parser
|
48
|
+
# base_uri - The base url for the parsed document.
|
49
|
+
# encoding - The document encoding, defaults to nil. Valid values
|
50
|
+
# are the encoding constants defined on XML::Encoding.
|
51
|
+
# options - Parser options. Valid values are the constants defined on
|
52
|
+
# XML::Parser::Options. Mutliple options can be combined
|
53
|
+
# by using Bitwise OR (|).
|
54
|
+
def self.io(value, options = {})
|
55
|
+
Parser.io(value, options).parse
|
56
|
+
end
|
57
|
+
|
58
|
+
# call-seq:
|
59
|
+
# XML::Document.string(string) -> XML::Document
|
60
|
+
# XML::Document.string(string, :encoding => XML::Encoding::UTF_8,
|
61
|
+
# :options => XML::Parser::Options::NOENT
|
62
|
+
# :base_uri="http://libxml.org") -> XML::Document
|
63
|
+
#
|
64
|
+
# Creates a new document from the specified string.
|
65
|
+
#
|
66
|
+
# You may provide an optional hash table to control how the
|
67
|
+
# parsing is performed. Valid options are:
|
68
|
+
#
|
69
|
+
# base_uri - The base url for the parsed document.
|
70
|
+
# encoding - The document encoding, defaults to nil. Valid values
|
71
|
+
# are the encoding constants defined on XML::Encoding.
|
72
|
+
# options - Parser options. Valid values are the constants defined on
|
73
|
+
# XML::Parser::Options. Mutliple options can be combined
|
74
|
+
# by using Bitwise OR (|).
|
75
|
+
def self.string(value, options = {})
|
76
|
+
Parser.string(value, options).parse
|
77
|
+
end
|
78
|
+
|
79
|
+
# Returns a new XML::XPathContext for the document.
|
80
|
+
#
|
81
|
+
# call-seq:
|
82
|
+
# document.context(namespaces=nil) -> XPath::Context
|
83
|
+
#
|
84
|
+
# Namespaces is an optional array of XML::NS objects
|
85
|
+
def context(nslist = nil)
|
86
|
+
context = XPath::Context.new(self)
|
87
|
+
context.node = self.root
|
88
|
+
context.register_namespaces_from_node(self.root)
|
89
|
+
context.register_namespaces(nslist) if nslist
|
90
|
+
context
|
91
|
+
end
|
92
|
+
|
93
|
+
# Return the nodes matching the specified xpath expression,
|
94
|
+
# optionally using the specified namespace. For more
|
95
|
+
# information about working with namespaces, please refer
|
96
|
+
# to the XML::XPath documentation.
|
97
|
+
#
|
98
|
+
# call-seq:
|
99
|
+
# document.find(xpath, nslist=nil) -> XML::XPath::Object
|
100
|
+
#
|
101
|
+
# Parameters:
|
102
|
+
# * xpath - The xpath expression as a string
|
103
|
+
# * namespaces - An optional list of namespaces (see XML::XPath for information).
|
104
|
+
#
|
105
|
+
# document.find('/foo', 'xlink:http://www.w3.org/1999/xlink')
|
106
|
+
#
|
107
|
+
# IMPORTANT - The returned XML::Node::Set must be freed before
|
108
|
+
# its associated document. In a running Ruby program this will
|
109
|
+
# happen automatically via Ruby's mark and sweep garbage collector.
|
110
|
+
# However, if the program exits, Ruby does not guarantee the order
|
111
|
+
# in which objects are freed
|
112
|
+
# (see http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-core/17700).
|
113
|
+
# As a result, the associated document may be freed before the node
|
114
|
+
# list, which will cause a segmentation fault.
|
115
|
+
# To avoid this, use the following (non-ruby like) coding style:
|
116
|
+
#
|
117
|
+
# nodes = doc.find('/header')
|
118
|
+
# nodes.each do |node|
|
119
|
+
# ... do stuff ...
|
120
|
+
# end
|
121
|
+
# # nodes = nil # GC.start
|
122
|
+
def find(xpath, nslist = nil)
|
123
|
+
self.context(nslist).find(xpath)
|
124
|
+
end
|
125
|
+
|
126
|
+
# Return the first node matching the specified xpath expression.
|
127
|
+
# For more information, please refer to the documentation
|
128
|
+
# for XML::Document#find.
|
129
|
+
def find_first(xpath, nslist = nil)
|
130
|
+
find(xpath, nslist).first
|
131
|
+
end
|
132
|
+
|
133
|
+
# Returns this node's type name
|
134
|
+
def node_type_name
|
135
|
+
case node_type
|
136
|
+
when XML::Node::DOCUMENT_NODE
|
137
|
+
'document_xml'
|
138
|
+
when XML::Node::DOCB_DOCUMENT_NODE
|
139
|
+
'document_docbook'
|
140
|
+
when XML::Node::HTML_DOCUMENT_NODE
|
141
|
+
'document_html'
|
142
|
+
else
|
143
|
+
raise(UnknownType, "Unknown node type: %n", node.node_type);
|
144
|
+
end
|
145
|
+
end
|
146
|
+
# :enddoc:
|
147
|
+
|
148
|
+
# Specifies if this is an document node
|
149
|
+
def document?
|
150
|
+
node_type == XML::Node::DOCUMENT_NODE
|
151
|
+
end
|
152
|
+
|
153
|
+
# Specifies if this is an docbook node
|
154
|
+
def docbook_doc?
|
155
|
+
node_type == XML::Node::DOCB_DOCUMENT_NODE
|
156
|
+
end
|
157
|
+
|
158
|
+
# Specifies if this is an html node
|
159
|
+
def html_doc?
|
160
|
+
node_type == XML::Node::HTML_DOCUMENT_NODE
|
161
|
+
end
|
162
|
+
|
163
|
+
def dump
|
164
|
+
warn('Document#dump is deprecated. Use Document#to_s instead.')
|
165
|
+
self.to_s
|
166
|
+
end
|
167
|
+
|
168
|
+
def format_dump
|
169
|
+
warn('Document#format_dump is deprecated. Use Document#to_s instead.')
|
170
|
+
self.to_s
|
171
|
+
end
|
172
|
+
|
173
|
+
def debug_dump
|
174
|
+
warn('Document#debug_dump is deprecated. Use Document#debug instead.')
|
175
|
+
self.debug
|
176
|
+
end
|
177
|
+
|
178
|
+
def debug_dump_head
|
179
|
+
warn('Document#debug_dump_head is deprecated. Use Document#debug instead.')
|
180
|
+
self.debug
|
181
|
+
end
|
182
|
+
|
183
|
+
def debug_format_dump
|
184
|
+
warn('Document#debug_format_dump is deprecated. Use Document#to_s instead.')
|
185
|
+
self.to_s
|
186
|
+
end
|
187
|
+
|
188
|
+
def reader
|
189
|
+
warn('Document#reader is deprecated. Use XML::Reader.document(self) instead.')
|
190
|
+
XML::Reader.document(self)
|
191
|
+
end
|
192
|
+
end
|
193
|
+
end
|
194
|
+
end
|
data/lib/libxml/error.rb
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module LibXML
|
4
|
+
module XML
|
5
|
+
class Error
|
6
|
+
# Create mapping from domain constant value to keys
|
7
|
+
DOMAIN_CODE_MAP = [:NO_ERROR, :PARSER, :TREE, :NAMESPACE, :DTD, :HTML, :MEMORY,
|
8
|
+
:OUTPUT, :IO, :FTP, :HTTP, :XINCLUDE, :XPATH, :XPOINTER, :REGEXP,
|
9
|
+
:DATATYPE, :SCHEMASP, :SCHEMASV, :RELAXNGP, :RELAXNGV, :CATALOG,
|
10
|
+
:C14N, :XSLT, :VALID, :CHECK, :WRITER, :MODULE, :I18N, :SCHEMATRONV].inject(Hash.new) do |hash, code|
|
11
|
+
if const_defined?(code)
|
12
|
+
hash[const_get(code)] = code.to_s
|
13
|
+
end
|
14
|
+
hash
|
15
|
+
end
|
16
|
+
|
17
|
+
# Create mapping from domain constant value to keys
|
18
|
+
ERROR_CODE_MAP = Hash.new.tap do |map|
|
19
|
+
(constants -
|
20
|
+
DOMAIN_CODE_MAP.values - #Domains
|
21
|
+
[:NONE, :WARNING, :ERROR, :FATAL] # Levels
|
22
|
+
).each do |code|
|
23
|
+
map[const_get(code)] = code.to_s
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
# Verbose error handler
|
28
|
+
VERBOSE_HANDLER = lambda do |error|
|
29
|
+
STDERR << error.to_s << "\n"
|
30
|
+
STDERR.flush
|
31
|
+
end
|
32
|
+
|
33
|
+
# Quiet error handler
|
34
|
+
QUIET_HANDLER = lambda do |error|
|
35
|
+
end
|
36
|
+
|
37
|
+
def ==(other)
|
38
|
+
eql?(other)
|
39
|
+
end
|
40
|
+
|
41
|
+
def eql?(other)
|
42
|
+
self.code == other.code and
|
43
|
+
self.domain == other.domain and
|
44
|
+
self.message == other.message and
|
45
|
+
self.level == other.level and
|
46
|
+
self.file == other.file and
|
47
|
+
self.line == other.line and
|
48
|
+
self.str1 == other.str1 and
|
49
|
+
self.str2 == other.str2 and
|
50
|
+
self.str3 == other.str3 and
|
51
|
+
self.int1 == other.int1 and
|
52
|
+
self.int2 == other.int2 and
|
53
|
+
self.ctxt == other.ctxt and
|
54
|
+
self.node == other.node
|
55
|
+
rescue
|
56
|
+
false
|
57
|
+
end
|
58
|
+
|
59
|
+
def level_to_s
|
60
|
+
case self.level
|
61
|
+
when NONE
|
62
|
+
''
|
63
|
+
when WARNING
|
64
|
+
'Warning:'
|
65
|
+
when ERROR
|
66
|
+
'Error:'
|
67
|
+
when FATAL
|
68
|
+
'Fatal error:'
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def domain_to_s
|
73
|
+
DOMAIN_CODE_MAP[self.domain]
|
74
|
+
end
|
75
|
+
|
76
|
+
def code_to_s
|
77
|
+
ERROR_CODE_MAP[self.code]
|
78
|
+
end
|
79
|
+
|
80
|
+
def to_s
|
81
|
+
msg = super
|
82
|
+
msg = msg ? msg.strip: ''
|
83
|
+
|
84
|
+
if self.line
|
85
|
+
sprintf("%s %s at %s:%d.", self.level_to_s, msg,
|
86
|
+
self.file, self.line)
|
87
|
+
else
|
88
|
+
sprintf("%s %s.", self.level_to_s, msg)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
LibXML::XML::Error.set_handler(&LibXML::XML::Error::VERBOSE_HANDLER)
|
@@ -0,0 +1,78 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
## Provide hpricot API for libxml. Provided by Michael Guterl,
|
4
|
+
## inspired by http://thebogles.com/blog/an-hpricot-style-interface-to-libxml
|
5
|
+
#
|
6
|
+
#class String
|
7
|
+
# def to_libxml_doc
|
8
|
+
# xp = XML::Parser.new
|
9
|
+
# xp.string = self
|
10
|
+
# xp.parse
|
11
|
+
# end
|
12
|
+
#end
|
13
|
+
#
|
14
|
+
#module LibXML
|
15
|
+
# module XML
|
16
|
+
# class Document
|
17
|
+
# alias :search :find
|
18
|
+
# end
|
19
|
+
#
|
20
|
+
# class Node
|
21
|
+
# # find the child node with the given xpath
|
22
|
+
# def at(xpath)
|
23
|
+
# self.find_first(xpath)
|
24
|
+
# end
|
25
|
+
#
|
26
|
+
# # find the array of child nodes matching the given xpath
|
27
|
+
# def search(xpath)
|
28
|
+
# results = self.find(xpath).to_a
|
29
|
+
# if block_given?
|
30
|
+
# results.each do |result|
|
31
|
+
# yield result
|
32
|
+
# end
|
33
|
+
# end
|
34
|
+
# return results
|
35
|
+
# end
|
36
|
+
#
|
37
|
+
# def /(xpath)
|
38
|
+
# search(xpath)
|
39
|
+
# end
|
40
|
+
#
|
41
|
+
# # return the inner contents of this node as a string
|
42
|
+
# def inner_xml
|
43
|
+
# child.to_s
|
44
|
+
# end
|
45
|
+
#
|
46
|
+
# # alias for inner_xml
|
47
|
+
# def inner_html
|
48
|
+
# inner_xml
|
49
|
+
# end
|
50
|
+
#
|
51
|
+
# # return this node and its contents as an xml string
|
52
|
+
# def to_xml
|
53
|
+
# self.to_s
|
54
|
+
# end
|
55
|
+
#
|
56
|
+
# # alias for path
|
57
|
+
# def xpath
|
58
|
+
# self.path
|
59
|
+
# end
|
60
|
+
#
|
61
|
+
# def find_with_default_ns(xpath_expr, namespace=nil)
|
62
|
+
# find_base(xpath_expr, namespace || default_namespaces)
|
63
|
+
# end
|
64
|
+
#
|
65
|
+
# def find_first_with_default_ns(xpath_expr, namespace=nil)
|
66
|
+
# find_first_base(xpath_expr, namespace || default_namespaces)
|
67
|
+
# end
|
68
|
+
#
|
69
|
+
## alias_method :find_base, :find unless method_defined?(:find_base)
|
70
|
+
## alias_method :find, :find_with_default_ns
|
71
|
+
## alias_method :find_first_base, :find_first unless method_defined?(:find_first_base)
|
72
|
+
## alias_method :find_first, :find_first_with_default_ns
|
73
|
+
## alias :child? :first?
|
74
|
+
## alias :children? :first?
|
75
|
+
## alias :child :first
|
76
|
+
# end
|
77
|
+
# end
|
78
|
+
#end
|
@@ -0,0 +1,96 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module LibXML
|
4
|
+
module XML
|
5
|
+
class HTMLParser
|
6
|
+
# call-seq:
|
7
|
+
# XML::HTMLParser.file(path) -> XML::HTMLParser
|
8
|
+
# XML::HTMLParser.file(path, :encoding => XML::Encoding::UTF_8,
|
9
|
+
# :options => XML::HTMLParser::Options::NOENT) -> XML::HTMLParser
|
10
|
+
#
|
11
|
+
# Creates a new parser by parsing the specified file or uri.
|
12
|
+
#
|
13
|
+
# You may provide an optional hash table to control how the
|
14
|
+
# parsing is performed. Valid options are:
|
15
|
+
#
|
16
|
+
# encoding - The document encoding, defaults to nil. Valid values
|
17
|
+
# are the encoding constants defined on XML::Encoding.
|
18
|
+
# options - Parser options. Valid values are the constants defined on
|
19
|
+
# XML::HTMLParser::Options. Mutliple options can be combined
|
20
|
+
# by using Bitwise OR (|).
|
21
|
+
def self.file(path, options = {})
|
22
|
+
context = XML::HTMLParser::Context.file(path)
|
23
|
+
context.encoding = options[:encoding] if options[:encoding]
|
24
|
+
context.options = options[:options] if options[:options]
|
25
|
+
self.new(context)
|
26
|
+
end
|
27
|
+
|
28
|
+
# call-seq:
|
29
|
+
# XML::HTMLParser.io(io) -> XML::HTMLParser
|
30
|
+
# XML::HTMLParser.io(io, :encoding => XML::Encoding::UTF_8,
|
31
|
+
# :options => XML::HTMLParser::Options::NOENT
|
32
|
+
# :base_uri="http://libxml.org") -> XML::HTMLParser
|
33
|
+
#
|
34
|
+
# Creates a new reader by parsing the specified io object.
|
35
|
+
#
|
36
|
+
# Parameters:
|
37
|
+
#
|
38
|
+
# io - io object that contains the xml to parser
|
39
|
+
# base_uri - The base url for the parsed document.
|
40
|
+
# encoding - The document encoding, defaults to nil. Valid values
|
41
|
+
# are the encoding constants defined on XML::Encoding.
|
42
|
+
# options - Parser options. Valid values are the constants defined on
|
43
|
+
# XML::HTMLParser::Options. Mutliple options can be combined
|
44
|
+
# by using Bitwise OR (|).
|
45
|
+
def self.io(io, options = {})
|
46
|
+
context = XML::HTMLParser::Context.io(io)
|
47
|
+
context.base_uri = options[:base_uri] if options[:base_uri]
|
48
|
+
context.encoding = options[:encoding] if options[:encoding]
|
49
|
+
context.options = options[:options] if options[:options]
|
50
|
+
self.new(context)
|
51
|
+
end
|
52
|
+
|
53
|
+
# call-seq:
|
54
|
+
# XML::HTMLParser.string(string)
|
55
|
+
# XML::HTMLParser.string(string, :encoding => XML::Encoding::UTF_8,
|
56
|
+
# :options => XML::HTMLParser::Options::NOENT
|
57
|
+
# :base_uri="http://libxml.org") -> XML::HTMLParser
|
58
|
+
#
|
59
|
+
# Creates a new parser by parsing the specified string.
|
60
|
+
#
|
61
|
+
# You may provide an optional hash table to control how the
|
62
|
+
# parsing is performed. Valid options are:
|
63
|
+
#
|
64
|
+
# base_uri - The base url for the parsed document.
|
65
|
+
# encoding - The document encoding, defaults to nil. Valid values
|
66
|
+
# are the encoding constants defined on XML::Encoding.
|
67
|
+
# options - Parser options. Valid values are the constants defined on
|
68
|
+
# XML::HTMLParser::Options. Mutliple options can be combined
|
69
|
+
# by using Bitwise OR (|).
|
70
|
+
def self.string(string, options = {})
|
71
|
+
context = XML::HTMLParser::Context.string(string)
|
72
|
+
context.base_uri = options[:base_uri] if options[:base_uri]
|
73
|
+
context.encoding = options[:encoding] if options[:encoding]
|
74
|
+
context.options = options[:options] if options[:options]
|
75
|
+
self.new(context)
|
76
|
+
end
|
77
|
+
|
78
|
+
# :enddoc:
|
79
|
+
|
80
|
+
def file=(value)
|
81
|
+
warn("XML::HTMLParser#file is deprecated. Use XML::HTMLParser.file instead")
|
82
|
+
@context = XML::HTMLParser::Context.file(value)
|
83
|
+
end
|
84
|
+
|
85
|
+
def io=(value)
|
86
|
+
warn("XML::HTMLParser#io is deprecated. Use XML::HTMLParser.io instead")
|
87
|
+
@context = XML::HTMLParser::Context.io(value)
|
88
|
+
end
|
89
|
+
|
90
|
+
def string=(value)
|
91
|
+
warn("XML::HTMLParser#string is deprecated. Use XML::HTMLParser.string instead")
|
92
|
+
@context = XML::HTMLParser::Context.string(value)
|
93
|
+
end
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
@@ -0,0 +1,62 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module LibXML
|
4
|
+
module XML
|
5
|
+
class Namespace
|
6
|
+
include Comparable
|
7
|
+
include Enumerable
|
8
|
+
|
9
|
+
# call-seq:
|
10
|
+
# namespace1 <=> namespace2
|
11
|
+
#
|
12
|
+
# Compares two namespace objects. Namespace objects are
|
13
|
+
# considered equal if their prefixes and hrefs are the same.
|
14
|
+
def <=>(other)
|
15
|
+
if self.prefix.nil? and other.prefix.nil?
|
16
|
+
self.href <=> other.href
|
17
|
+
elsif self.prefix.nil?
|
18
|
+
-1
|
19
|
+
elsif other.prefix.nil?
|
20
|
+
1
|
21
|
+
else
|
22
|
+
self.prefix <=> other.prefix
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
# call-seq:
|
27
|
+
# namespace.each {|ns| .. }
|
28
|
+
#
|
29
|
+
# libxml stores namespaces in memory as a linked list.
|
30
|
+
# Use the each method to iterate over the list. Note
|
31
|
+
# the first namespace in the loop is the current namespace.
|
32
|
+
#
|
33
|
+
# Usage:
|
34
|
+
# namespace.each do |ns|
|
35
|
+
# ..
|
36
|
+
# end
|
37
|
+
def each
|
38
|
+
ns = self
|
39
|
+
|
40
|
+
while ns
|
41
|
+
yield ns
|
42
|
+
ns = ns.next
|
43
|
+
end
|
44
|
+
end
|
45
|
+
|
46
|
+
# call-seq:
|
47
|
+
# namespace.to_s -> "string"
|
48
|
+
#
|
49
|
+
# Returns the string represenation of a namespace.
|
50
|
+
#
|
51
|
+
# Usage:
|
52
|
+
# namespace.to_s
|
53
|
+
def to_s
|
54
|
+
if self.prefix
|
55
|
+
"#{self.prefix}:#{self.href}"
|
56
|
+
else
|
57
|
+
self.href
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
# encoding: UTF-8
|
2
|
+
|
3
|
+
module LibXML
|
4
|
+
module XML
|
5
|
+
class Namespaces
|
6
|
+
# call-seq:
|
7
|
+
# namespace.default -> XML::Namespace
|
8
|
+
#
|
9
|
+
# Returns the default namespace for this node or nil.
|
10
|
+
#
|
11
|
+
# Usage:
|
12
|
+
# doc = XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
|
13
|
+
# ns = doc.root.namespaces.default_namespace
|
14
|
+
# assert_equal(ns.href, 'http://schemas.xmlsoap.org/soap/envelope/')
|
15
|
+
def default
|
16
|
+
find_by_prefix(nil)
|
17
|
+
end
|
18
|
+
|
19
|
+
# call-seq:
|
20
|
+
# namespace.default_prefix = "string"
|
21
|
+
#
|
22
|
+
# Assigns a name (prefix) to the default namespace.
|
23
|
+
# This makes it much easier to perform XML::XPath
|
24
|
+
# searches.
|
25
|
+
#
|
26
|
+
# Usage:
|
27
|
+
# doc = XML::Document.string('<Envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/>')
|
28
|
+
# doc.root.namespaces.default_prefix = 'soap'
|
29
|
+
# node = doc.root.find_first('soap:Envelope')
|
30
|
+
def default_prefix=(prefix)
|
31
|
+
# Find default prefix
|
32
|
+
ns = find_by_prefix(nil)
|
33
|
+
raise(ArgumentError, "No default namespace was found") unless ns
|
34
|
+
Namespace.new(self.node, prefix, ns.href)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|