xml-motor 0.0.8 → 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/README +35 -6
- data/lib/xml-motor.rb +24 -29
- data/lib/xml-motor/version.rb +1 -1
- metadata +2 -2
data/README
CHANGED
@@ -28,22 +28,34 @@ An easy-to-use XML Parser without any Native Dependencies.
|
|
28
28
|
|
29
29
|
Usage:
|
30
30
|
[[ To Search Just One QUERY ]]
|
31
|
-
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_"
|
32
|
-
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_", "ATTRIB_KEY=ATTRIB_VALUE"
|
33
|
-
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_"
|
34
|
-
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "ATTRIB_KEY=ATTRIB_VALUE"
|
31
|
+
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_", "_TAG_"
|
32
|
+
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_", "_TAG_", "ATTRIB_KEY=ATTRIB_VALUE"
|
33
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "_TAG_"
|
34
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "_TAG_", "ATTRIB_KEY=ATTRIB_VALUE"
|
35
|
+
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_", nil, "ATTRIB_KEY=ATTRIB_VALUE"
|
36
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", nil, "ATTRIB_KEY=ATTRIB_VALUE"
|
35
37
|
>>>>> for having root-node-tag also in returned result <<<<<
|
36
|
-
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_", nil, true
|
37
|
-
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "ATTRIB_KEY=ATTRIB_VALUE", true
|
38
|
+
nodes_array = XMLMotor.get_node_from_file "_XML_FILE_", "_TAG_", nil, true
|
39
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "_TAG_", "ATTRIB_KEY=ATTRIB_VALUE", true
|
40
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "_TAG_", ["ATTRIB_KEY=ATTRIB_VALUE"], true
|
41
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "_TAG_", ["KEY1=VALUE1", "KEY2=VALUE2"...], true
|
42
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", "_TAG_", ["KEY1=VALUE1", "KEY2=VALUE2"...], true
|
43
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", nil, "ATTRIB_KEY=ATTRIB_VALUE", true
|
44
|
+
nodes_array = XMLMotor.get_node_from_content "_XML_DATA_", nil, ["KEY1=VALUE1", "KEY2=VALUE2"...], true
|
38
45
|
[[ To Search More Than One QUERIES ]]
|
39
46
|
str = {XML_DATA}
|
40
47
|
nodes_ = XMLMotorEngine._splitter_ str
|
41
48
|
tags_ = XMLMotorEngine._indexify_ nodes_
|
42
49
|
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_"
|
43
50
|
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", "ATTRIB_KEY=ATTRIB_VALUE"
|
51
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, nil, "ATTRIB_KEY=ATTRIB_VALUE"
|
44
52
|
>>>>> for having root-node-tag also in returned result <<<<<
|
45
53
|
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", nil, true
|
46
54
|
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", "ATTRIB_KEY=ATTRIB_VALUE", true
|
55
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", ["ATTRIB_KEY=ATTRIB_VALUE"], true
|
56
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", ["KEY1=VALUE1", "KEY2=VALUE2"...], true
|
57
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, nil, ["KEY1=VALUE1", "KEY2=VALUE2"...], true
|
58
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, nil, "ATTRIB_KEY=ATTRIB_VALUE", true
|
47
59
|
|
48
60
|
Example Calls As Code:
|
49
61
|
+ XMLMotor.get_node_from_content "<A>a</A><B><A>ba</A></B>", "A"
|
@@ -57,6 +69,23 @@ An easy-to-use XML Parser without any Native Dependencies.
|
|
57
69
|
=====================================================================
|
58
70
|
CHANGE-LOG
|
59
71
|
=====================================================================
|
72
|
+
Changes from v0.0.10 to v0.1.0
|
73
|
+
[] support added to search for xml nodes just by using their attributes without any tag-name
|
74
|
+
for e.g.
|
75
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, nil, "ATTRIB_KEY=ATTRIB_VALUE", true
|
76
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, nil, ["ATTRIB_KEY=ATTRIB_VALUE"], true
|
77
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, nil, ["KEY1=VALUE1", "KEY2=VALUE2"...]
|
78
|
+
=====================================================================
|
79
|
+
Changes from v0.0.9 to v0.0.10
|
80
|
+
[] xml tag name match corrected to be case-insensitive
|
81
|
+
=====================================================================
|
82
|
+
Changes from v0.0.8 to v0.0.9
|
83
|
+
[] option to filter result for multiple attributes key-value pair if sent as an array of "ATTRIB_KEY = ATTRIB_VALUE"
|
84
|
+
for e.g.
|
85
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", "ATTRIB_KEY=ATTRIB_VALUE", true
|
86
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", ["ATTRIB_KEY=ATTRIB_VALUE"], true
|
87
|
+
nodes_array = XMLMotorEngine.pre_processed_content nodes_, tags_, "_TAG_", ["KEY1=VALUE1", "KEY2=VALUE2"...], true
|
88
|
+
=====================================================================
|
60
89
|
Changes from v0.0.7 to v0.0.8
|
61
90
|
[] avail the result inclusive of root-node-value with an extra 'true' after attrib/nil
|
62
91
|
for e.g.
|
data/lib/xml-motor.rb
CHANGED
@@ -17,7 +17,7 @@ module XMLUtils
|
|
17
17
|
end
|
18
18
|
|
19
19
|
module XMLIndexHandler
|
20
|
-
def self.
|
20
|
+
def self.get_tag_indexes(xml_motor, tag)
|
21
21
|
xml_idx_to_find = []
|
22
22
|
begin
|
23
23
|
xml_motor.xmltags[tag.split(".")[0]].each_value {|val| xml_idx_to_find.push val }
|
@@ -66,7 +66,7 @@ module XMLChopper
|
|
66
66
|
tag_name = in_tag_split.first
|
67
67
|
attribzone = in_tag_split[1..-1].flatten.join(' ')
|
68
68
|
attrs = get_attribute_hash attribzone
|
69
|
-
[[tag_name,attrs],out_tag]
|
69
|
+
[[tag_name.downcase, attrs],out_tag]
|
70
70
|
end
|
71
71
|
|
72
72
|
def self.get_attribute_hash(attribzone)
|
@@ -104,9 +104,6 @@ module XMLJoiner
|
|
104
104
|
end
|
105
105
|
end
|
106
106
|
|
107
|
-
##
|
108
|
-
# main class
|
109
|
-
|
110
107
|
module XMLMotorEngine
|
111
108
|
def self._splitter_(xmldata)
|
112
109
|
@xmlnodes = [xmldata.split(/</)[0]]
|
@@ -122,7 +119,7 @@ module XMLMotorEngine
|
|
122
119
|
idx = 1
|
123
120
|
depth = 0
|
124
121
|
@xmlnodes[1..-1].each do |xnode|
|
125
|
-
tag_name = xnode[0][0].strip
|
122
|
+
tag_name = xnode[0][0].strip.downcase
|
126
123
|
unless tag_name.match(/^\/.*/) then
|
127
124
|
@xmltags[tag_name] ||= {}
|
128
125
|
@xmltags[tag_name][depth] ||= []
|
@@ -138,19 +135,24 @@ module XMLMotorEngine
|
|
138
135
|
@xmltags
|
139
136
|
end
|
140
137
|
|
141
|
-
def self.
|
142
|
-
|
143
|
-
|
144
|
-
|
138
|
+
def self._get_attrib_key_val_ (attrib)
|
139
|
+
attrib_key = attrib.split(/=/)[0].strip
|
140
|
+
attrib_val = attrib.split(/=/)[1..-1].join.strip
|
141
|
+
[attrib_key, XMLUtils.dbqot_string(attrib_val)]
|
142
|
+
end
|
143
|
+
|
144
|
+
def self._grab_my_node_ (index_to_find, attrib_to_find=nil, with_tag=false)
|
145
|
+
unless attrib_to_find.nil? or attrib_to_find.empty?
|
146
|
+
attrib_keyval = [attrib_to_find].flatten.collect{|keyval| _get_attrib_key_val_ keyval }
|
145
147
|
end
|
146
148
|
nodes = []
|
147
|
-
node_count =
|
149
|
+
node_count = index_to_find.size/2 -1
|
148
150
|
0.upto node_count do |ncount|
|
149
|
-
node_start =
|
150
|
-
node_stop =
|
151
|
-
unless attrib_to_find.nil?
|
151
|
+
node_start = index_to_find[ncount*2]
|
152
|
+
node_stop = index_to_find[ncount*2 +1]
|
153
|
+
unless attrib_to_find.nil? or attrib_to_find.empty?
|
152
154
|
next if @xmlnodes[node_start][0][1].nil?
|
153
|
-
next
|
155
|
+
next if attrib_keyval.collect{|keyval| @xmlnodes[node_start][0][1][keyval.first] == keyval.last}.include? false
|
154
156
|
end
|
155
157
|
nodes[ncount] ||= ""
|
156
158
|
nodes[ncount] += @xmlnodes[node_start][1] unless @xmlnodes[node_start][1].nil?
|
@@ -170,20 +172,15 @@ module XMLMotorEngine
|
|
170
172
|
end
|
171
173
|
|
172
174
|
def self.xml_extracter(tag_to_find=nil, attrib_to_find=nil, with_tag=false)
|
173
|
-
|
175
|
+
index_to_find = []
|
174
176
|
if attrib_to_find.nil? and tag_to_find.nil?
|
175
|
-
|
176
|
-
xml_to_find = XMLIndexHandler.get_node_indexes self, tag_to_find
|
177
|
-
my_nodes = _grab_my_node_ xml_to_find, nil, with_tag
|
177
|
+
return nil
|
178
178
|
elsif tag_to_find.nil?
|
179
|
-
|
180
|
-
XMLStdout._nfo "Just attrib-based search to come"
|
181
|
-
#
|
179
|
+
index_to_find = @xmltags.collect {|xtag| xtag[1].collect {|val| val[1] }}.flatten
|
182
180
|
else
|
183
|
-
|
184
|
-
my_nodes = _grab_my_node_ xml_to_find, attrib_to_find, with_tag
|
181
|
+
index_to_find = XMLIndexHandler.get_tag_indexes self, tag_to_find.downcase
|
185
182
|
end
|
186
|
-
|
183
|
+
_grab_my_node_ index_to_find, attrib_to_find, with_tag
|
187
184
|
end
|
188
185
|
|
189
186
|
def self.xml_miner(xmldata, tag_to_find=nil, attrib_to_find=nil, with_tag=false)
|
@@ -194,13 +191,11 @@ module XMLMotorEngine
|
|
194
191
|
end
|
195
192
|
|
196
193
|
def self.xmlnodes(xml_nodes=nil)
|
197
|
-
@xmlnodes = xml_nodes
|
198
|
-
@xmlnodes
|
194
|
+
@xmlnodes = xml_nodes || @xmlnodes
|
199
195
|
end
|
200
196
|
|
201
197
|
def self.xmltags(xml_tags=nil)
|
202
|
-
@xmltags = xml_tags
|
203
|
-
@xmltags
|
198
|
+
@xmltags = xml_tags || @xmltags
|
204
199
|
end
|
205
200
|
|
206
201
|
def self.pre_processed_content(_nodes, _tags=nil, tag_to_find=nil, attrib_to_find=nil, with_tag=false)
|
data/lib/xml-motor/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xml-motor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- abhishekkr
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2012-01-
|
12
|
+
date: 2012-01-25 00:00:00 +05:30
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|