xml-motor 0.0.2 → 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- 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
|
+
|