xml-motor 0.0.2 → 0.0.3
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/README +45 -0
- data/lib/xml-motor.rb +42 -33
- data/lib/xml-motor/version.rb +1 -1
- data/xml-motor.gemspec +13 -7
- metadata +43 -32
data/README
ADDED
@@ -0,0 +1,45 @@
|
|
1
|
+
======================================================================
|
2
|
+
|
3
|
+
\\// ||\/|| || _ ||\/|| ||@|| ~++~ ||@|| ||))
|
4
|
+
//\\ || || ||_ || || ||_|| || ||_|| ||\\
|
5
|
+
|
6
|
+
======================================================================
|
7
|
+
v 0.0.2
|
8
|
+
|
9
|
+
@GitHub: https://github.com/abhishekkr/rubygem_xml_motor
|
10
|
+
@RubyGems: http://rubygems.org/gems/xml-motor
|
11
|
+
|
12
|
+
for support contact:
|
13
|
+
mail: abhikumar163@gmail.com
|
14
|
+
http://www.twitter.com/aBionic
|
15
|
+
======================================================================
|
16
|
+
|
17
|
+
A new short XML Parsing Algorithm implemented directly in >500 lines.
|
18
|
+
An easy-to-use XML Parser without any Native Dependencies.
|
19
|
+
[How To Use]:
|
20
|
+
|
21
|
+
Loading:
|
22
|
+
+ $ gem install xml-motor
|
23
|
+
+ 'require' the 'xml-motor'
|
24
|
+
|
25
|
+
Usage:
|
26
|
+
[[ To Search Just One QUERY ]]
|
27
|
+
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_"
|
28
|
+
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_", "ATTRIB_KEY=ATTRIB_VALUE"
|
29
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_"
|
30
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "ATTRIB_KEY=ATTRIB_VALUE"
|
31
|
+
[[ To Search More Than One QUERIES ]]
|
32
|
+
str = {XML_DATA}
|
33
|
+
nodes_ = XMLMotorEngine._splitter_ str
|
34
|
+
tags_ = XMLMotorEngine._indexify_ nodes_
|
35
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_"
|
36
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", "ATTRIB_KEY=ATTRIB_VALUE"
|
37
|
+
|
38
|
+
Example Calls As Code:
|
39
|
+
+ XMLMotor.get_node_from_content "<A>a</A><B><A>ba</A></B>", "A"
|
40
|
+
RETURNS: ["a", "ba"]
|
41
|
+
+ XMLMotor.get_node_from_content "<A>a</A><B><A>ba</A></B>", "B.A"
|
42
|
+
RETURNS: ["ba"]
|
43
|
+
+ XMLMotor.get_node_from_content "<A i='1'>a</A><B><A i='2'>ba</A></B>", "A", "i='1'"
|
44
|
+
RETURNS: ["a"]
|
45
|
+
|
data/lib/xml-motor.rb
CHANGED
@@ -3,18 +3,14 @@
|
|
3
3
|
module XMLIndexHandler
|
4
4
|
def self.get_node_indexes(xml_motor, tag)
|
5
5
|
xml_idx_to_find = []
|
6
|
-
xml_motor.xmltags[tag.split(".")[0]].each_value
|
7
|
-
xml_idx_to_find.push v
|
8
|
-
end
|
6
|
+
xml_motor.xmltags[tag.split(".")[0]].each_value {|val| xml_idx_to_find.push val }
|
9
7
|
xml_idx_to_find = xml_idx_to_find.flatten
|
10
8
|
|
11
9
|
tag.split(".")[1..-1].each do |tag_i|
|
12
10
|
outer_idx = xml_idx_to_find
|
13
11
|
osize=outer_idx.size/2 -1
|
14
12
|
x_curr=[]
|
15
|
-
xml_motor.xmltags[tag_i].each_value
|
16
|
-
x_curr.push v
|
17
|
-
end
|
13
|
+
xml_motor.xmltags[tag_i].each_value {|val| x_curr.push val }
|
18
14
|
x_curr = x_curr.flatten
|
19
15
|
xsize=x_curr.size/2 -1
|
20
16
|
|
@@ -85,9 +81,8 @@ end
|
|
85
81
|
|
86
82
|
##
|
87
83
|
# main class
|
88
|
-
##
|
89
84
|
|
90
|
-
module
|
85
|
+
module XMLMotorEngine
|
91
86
|
def self._splitter_(xmldata)
|
92
87
|
@xmlnodes=[xmldata.split(/</)[0]]
|
93
88
|
xmldata.split(/</)[1..-1].each do |x1|
|
@@ -95,7 +90,8 @@ module XMLMotorHandler
|
|
95
90
|
end
|
96
91
|
end
|
97
92
|
|
98
|
-
def self._indexify_
|
93
|
+
def self._indexify_(_nodes=nil)
|
94
|
+
xmlnodes _nodes unless _nodes.nil?
|
99
95
|
@xmltags = {}
|
100
96
|
idx = 1
|
101
97
|
depth = 0
|
@@ -141,57 +137,70 @@ module XMLMotorHandler
|
|
141
137
|
nodes
|
142
138
|
end
|
143
139
|
|
144
|
-
def self.
|
145
|
-
_splitter_ xmldata
|
146
|
-
_indexify_
|
140
|
+
def self.xml_extracter(tag_to_find=nil, attrib_to_find=nil)
|
147
141
|
my_nodes = nil
|
148
142
|
if attrib_to_find.nil?
|
149
143
|
xml_to_find = XMLIndexHandler.get_node_indexes self, tag_to_find
|
150
144
|
my_nodes = _grab_my_node_ xml_to_find
|
151
145
|
elsif tag_to_find.nil?
|
146
|
+
#
|
147
|
+
#just attrib-based search to come
|
148
|
+
#
|
152
149
|
elsif !attrib_to_find.nil? and !tag_to_find.nil?
|
153
150
|
xml_to_find = XMLIndexHandler.get_node_indexes self, tag_to_find
|
154
151
|
my_nodes = _grab_my_node_ xml_to_find, attrib_to_find
|
155
152
|
end
|
156
153
|
my_nodes
|
154
|
+
end
|
155
|
+
|
156
|
+
def self.xml_miner(xmldata, tag_to_find=nil, attrib_to_find=nil)
|
157
|
+
_splitter_ xmldata
|
158
|
+
_indexify_
|
159
|
+
xml_extracter tag_to_find, attrib_to_find
|
160
|
+
end
|
161
|
+
|
162
|
+
def self.xmlnodes(xmlnodes=nil)
|
163
|
+
@xmlnodes ||= xmlnodes
|
157
164
|
end
|
158
165
|
|
159
|
-
def self.
|
160
|
-
@
|
166
|
+
def self.xmltags(xmltags=nil)
|
167
|
+
@xmltags ||= xmltags
|
161
168
|
end
|
162
169
|
|
163
|
-
def self.
|
164
|
-
|
170
|
+
def self.pre_processed_content(_nodes, _tags=nil, tag_to_find=nil, attrib_to_find=nil)
|
171
|
+
begin
|
172
|
+
xmlnodes _nodes
|
173
|
+
unless _tags.nil?
|
174
|
+
xmltags _tags
|
175
|
+
else
|
176
|
+
_indexify_ _nodes
|
177
|
+
end
|
178
|
+
return xml_extracter tag_to_find, attrib_to_find
|
179
|
+
rescue
|
180
|
+
puts "Error problem parsing processed XML Nodes."
|
181
|
+
end
|
182
|
+
return ""
|
165
183
|
end
|
166
184
|
end
|
167
185
|
|
168
186
|
##
|
169
187
|
# XMLMotor_EXECUTIONER ;)
|
170
|
-
##
|
171
188
|
|
172
189
|
module XMLMotor
|
173
190
|
def self.get_node_from_file(file, my_tag=nil, my_attrib=nil)
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
rescue
|
179
|
-
puts "Error: problem parsing File Content"
|
180
|
-
end
|
181
|
-
else
|
182
|
-
puts "Error: #{file} is not readable."
|
183
|
-
end
|
191
|
+
begin
|
192
|
+
return get_node_from_content(File.read(file.to_s), my_tag, my_attrib) unless File.readable? file.to_s
|
193
|
+
rescue
|
194
|
+
puts "Error: #{file} is not readable."
|
184
195
|
end
|
185
196
|
return ""
|
186
197
|
end
|
187
198
|
|
188
199
|
def self.get_node_from_content(content, my_tag=nil, my_attrib=nil)
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
puts "Error problem parsing String Content #{content}"
|
194
|
-
end
|
200
|
+
begin
|
201
|
+
return XMLMotorEngine.xml_miner content, my_tag, my_attrib unless content.nil?
|
202
|
+
rescue
|
203
|
+
puts "Error problem parsing String Content #{content}"
|
195
204
|
end
|
196
205
|
return ""
|
197
206
|
end
|
data/lib/xml-motor/version.rb
CHANGED
data/xml-motor.gemspec
CHANGED
@@ -10,19 +10,25 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.homepage = "http://github.com/abhishekkr/rubygem_xml_motor"
|
11
11
|
s.summary = %q{An easy-to-use XML Parser without any Native Dependencies}
|
12
12
|
s.description = %q{A new short XML Parsing Algorithm implemented directly in >500 lines. An easy-to-use XML Parser without any Native Dependencies.
|
13
|
-
|
13
|
+
|
14
|
+
[How To Use]: https://github.com/abhishekkr/rubygem_xml_motor/raw/master/README
|
14
15
|
|
15
16
|
Loading:
|
16
17
|
+ $ gem install xml-motor
|
17
18
|
+ 'require' the 'xml-motor'
|
18
19
|
|
19
20
|
Usage:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
[[ To Search Just One QUERY ]]
|
22
|
+
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_"
|
23
|
+
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_", "ATTRIB_KEY=ATTRIB_VALUE"
|
24
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_"
|
25
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "ATTRIB_KEY=ATTRIB_VALUE"
|
26
|
+
[[ To Search More Than One QUERIES ]]
|
27
|
+
str = {XML_DATA}
|
28
|
+
nodes_ = XMLMotorEngine._splitter_ str
|
29
|
+
tags_ = XMLMotorEngine._indexify_ nodes_
|
30
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_"
|
31
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", "ATTRIB_KEY=ATTRIB_VALUE"
|
26
32
|
|
27
33
|
Example Calls As Code:
|
28
34
|
+ XMLMotor.get_node_from_content "<A>a</A><B><A>ba</A></B>", "A"
|
metadata
CHANGED
@@ -1,63 +1,74 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: xml-motor
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 0
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- abhishekkr
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
17
|
+
|
18
|
+
date: 2011-11-12 00:00:00 +05:30
|
19
|
+
default_executable:
|
13
20
|
dependencies: []
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
\ Usage:\n + To find values of an xml node from an xml file\n XMLMotor.get_node_from_file
|
18
|
-
<file_with_path>, <node>\n + To find values of an xml node from an xml string\n
|
19
|
-
\ XMLMotor.get_node_from_content <xml_string>, <node>\n + To find
|
20
|
-
values of an xml node with a tag_name having required attribute\n XMLMotor.get_node_from_content
|
21
|
-
<xml_string>, <node>, \"<attrib_key>=<attrib_value>\"\n\n Example Calls As
|
22
|
-
Code:\n + XMLMotor.get_node_from_content \"<A>a</A><B><A>ba</A></B>\", \"A\"\n
|
23
|
-
\ RETURNS: [\"a\", \"ba\"]\n + XMLMotor.get_node_from_content
|
24
|
-
\"<A>a</A><B><A>ba</A></B>\", \"B.A\"\n RETURNS: [\"ba\"]\n +
|
25
|
-
XMLMotor.get_node_from_content \"<A i='1'>a</A><B><A i='2'>ba</A></B>\", \"A\",
|
26
|
-
\"i='1'\"\n RETURNS: [\"a\"]\n "
|
27
|
-
email:
|
21
|
+
|
22
|
+
description: "A new short XML Parsing Algorithm implemented directly in >500 lines. An easy-to-use XML Parser without any Native Dependencies.\n \n [How To Use]: https://github.com/abhishekkr/rubygem_xml_motor/raw/master/README \n\n Loading:\n + $ gem install xml-motor\n + 'require' the 'xml-motor'\n\n Usage:\n [[ To Search Just One QUERY ]]\n nodes_array = XMLMotor.get_node_from_file \"_XML_FILE_\"\n nodes_array = XMLMotor.get_node_from_file \"_XML_FILE_\", \"ATTRIB_KEY=ATTRIB_VALUE\"\n nodes_array = XMLMotor.get_node_from_content \"_XML_DATA_\"\n nodes_array = XMLMotor.get_node_from_content \"_XML_DATA_\", \"ATTRIB_KEY=ATTRIB_VALUE\"\n [[ To Search More Than One QUERIES ]]\n str = {XML_DATA}\n nodes_ = XMLMotorEngine._splitter_ str\n tags_ = XMLMotorEngine._indexify_ nodes_\n nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, \"_TAG_\"\n nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, \"_TAG_\", \"ATTRIB_KEY=ATTRIB_VALUE\"\n\n Example Calls As Code:\n + XMLMotor.get_node_from_content \"<A>a</A><B><A>ba</A></B>\", \"A\"\n RETURNS: [\"a\", \"ba\"]\n + XMLMotor.get_node_from_content \"<A>a</A><B><A>ba</A></B>\", \"B.A\"\n RETURNS: [\"ba\"]\n + XMLMotor.get_node_from_content \"<A i='1'>a</A><B><A i='2'>ba</A></B>\", \"A\", \"i='1'\"\n RETURNS: [\"a\"]\n "
|
23
|
+
email:
|
28
24
|
- abhishk@thoughtworks.com
|
29
25
|
executables: []
|
26
|
+
|
30
27
|
extensions: []
|
28
|
+
|
31
29
|
extra_rdoc_files: []
|
32
|
-
|
30
|
+
|
31
|
+
files:
|
33
32
|
- Gemfile
|
33
|
+
- README
|
34
34
|
- Rakefile
|
35
35
|
- lib/xml-motor.rb
|
36
36
|
- lib/xml-motor/version.rb
|
37
37
|
- make_my_gem.sh
|
38
38
|
- xml-motor.gemspec
|
39
|
+
has_rdoc: true
|
39
40
|
homepage: http://github.com/abhishekkr/rubygem_xml_motor
|
40
41
|
licenses: []
|
42
|
+
|
41
43
|
post_install_message:
|
42
44
|
rdoc_options: []
|
43
|
-
|
45
|
+
|
46
|
+
require_paths:
|
44
47
|
- lib
|
45
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
48
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
46
49
|
none: false
|
47
|
-
requirements:
|
48
|
-
- -
|
49
|
-
- !ruby/object:Gem::Version
|
50
|
-
|
51
|
-
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
hash: 3
|
54
|
+
segments:
|
55
|
+
- 0
|
56
|
+
version: "0"
|
57
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
52
58
|
none: false
|
53
|
-
requirements:
|
54
|
-
- -
|
55
|
-
- !ruby/object:Gem::Version
|
56
|
-
|
59
|
+
requirements:
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
hash: 3
|
63
|
+
segments:
|
64
|
+
- 0
|
65
|
+
version: "0"
|
57
66
|
requirements: []
|
67
|
+
|
58
68
|
rubyforge_project: xml-motor
|
59
|
-
rubygems_version: 1.
|
69
|
+
rubygems_version: 1.6.2
|
60
70
|
signing_key:
|
61
71
|
specification_version: 3
|
62
72
|
summary: An easy-to-use XML Parser without any Native Dependencies
|
63
73
|
test_files: []
|
74
|
+
|