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.
Files changed (4) hide show
  1. data/README +35 -6
  2. data/lib/xml-motor.rb +24 -29
  3. data/lib/xml-motor/version.rb +1 -1
  4. 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.
@@ -17,7 +17,7 @@ module XMLUtils
17
17
  end
18
18
 
19
19
  module XMLIndexHandler
20
- def self.get_node_indexes(xml_motor, tag)
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._grab_my_node_ (xml_to_find, attrib_to_find=nil, with_tag=false)
142
- unless attrib_to_find.nil?
143
- attrib_key = attrib_to_find.split(/=/)[0].strip
144
- attrib_val = attrib_to_find.split(/=/)[1..-1].join.strip
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 = xml_to_find.size/2 -1
149
+ node_count = index_to_find.size/2 -1
148
150
  0.upto node_count do |ncount|
149
- node_start = xml_to_find[ncount*2]
150
- node_stop = xml_to_find[ncount*2 +1]
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 unless @xmlnodes[node_start][0][1][attrib_key] == XMLUtils.dbqot_string(attrib_val)
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
- my_nodes = nil
175
+ index_to_find = []
174
176
  if attrib_to_find.nil? and tag_to_find.nil?
175
- elsif attrib_to_find.nil?
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
- xml_to_find = XMLIndexHandler.get_node_indexes self, tag_to_find
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
- my_nodes
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 unless xml_nodes.nil?
198
- @xmlnodes
194
+ @xmlnodes = xml_nodes || @xmlnodes
199
195
  end
200
196
 
201
197
  def self.xmltags(xml_tags=nil)
202
- @xmltags = xml_tags unless xml_tags.nil?
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)
@@ -1,5 +1,5 @@
1
1
  module Xml
2
2
  module Motor
3
- VERSION = "0.0.8"
3
+ VERSION = "0.1.0"
4
4
  end
5
5
  end
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.8
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-16 00:00:00 +05:30
12
+ date: 2012-01-25 00:00:00 +05:30
13
13
  default_executable:
14
14
  dependencies: []
15
15