rexle 0.2.11 → 0.2.12
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/lib/rexle.rb +40 -18
- metadata +2 -2
data/lib/rexle.rb
CHANGED
@@ -62,7 +62,10 @@ class Rexle
|
|
62
62
|
|
63
63
|
return scan_match(self, element_name, attr_search, condition, rlist) if xpath_value[0,2] == '//'
|
64
64
|
|
65
|
-
return_elements = @child_lookup.map.with_index.select {|x|
|
65
|
+
return_elements = @child_lookup.map.with_index.select {|x|
|
66
|
+
|
67
|
+
x[0][0] == element_name or element_name == '*'
|
68
|
+
}
|
66
69
|
|
67
70
|
if return_elements.length > 0 then
|
68
71
|
|
@@ -71,15 +74,17 @@ class Rexle
|
|
71
74
|
else
|
72
75
|
|
73
76
|
return_elements.map.with_index do |x,i|
|
74
|
-
rtn_element = filter(x, i+1, attr_search){|e| r = e.xpath(a.join('/'), rlist); r || e }
|
77
|
+
rtn_element = filter(x, i+1, attr_search){|e| r = e.xpath(a.join('/'), rlist); r || e }
|
78
|
+
next unless rtn_element
|
79
|
+
|
75
80
|
if rtn_element.is_a? Array then
|
76
81
|
rlist = rtn_element.flatten
|
77
82
|
elsif (rtn_element.is_a? String) || not(rtn_element[0].is_a? String)
|
78
83
|
rlist << rtn_element
|
79
84
|
end
|
80
85
|
end
|
86
|
+
|
81
87
|
end
|
82
|
-
|
83
88
|
else
|
84
89
|
|
85
90
|
# strip off the 1st element from the XPath
|
@@ -108,6 +113,16 @@ class Rexle
|
|
108
113
|
|
109
114
|
private
|
110
115
|
|
116
|
+
def scan_print(nodes)
|
117
|
+
out = []
|
118
|
+
nodes.each do |x|
|
119
|
+
out << "<%s>" % x.name
|
120
|
+
out << scan_print(x.children)
|
121
|
+
out << "</%s>" % x.name
|
122
|
+
end
|
123
|
+
out
|
124
|
+
end
|
125
|
+
|
111
126
|
def format_attributes(condition)
|
112
127
|
raw_items = condition[1..-1].scan(/[\w]+=\'[^\']+\'|and|\d+/)
|
113
128
|
|
@@ -147,25 +162,25 @@ class Rexle
|
|
147
162
|
|
148
163
|
x = raw_element
|
149
164
|
e = @child_elements[x.last]
|
165
|
+
h = x[0][1] # <-- fetch the attributes
|
150
166
|
|
151
|
-
if attr_search
|
152
|
-
|
153
|
-
|
154
|
-
blk.call(e)
|
155
|
-
else
|
156
|
-
if attr_search.is_a? Fixnum then
|
157
|
-
e if i == attr_search
|
158
|
-
else
|
159
|
-
e if h and eval(attr_search)
|
160
|
-
end
|
161
|
-
end
|
162
|
-
else
|
167
|
+
if not attr_search or \
|
168
|
+
(attr_search and ((attr_search.is_a?(Fixnum) and \
|
169
|
+
i == attr_search) or (h and eval(attr_search)))) then
|
163
170
|
block_given? ? blk.call(e) : e
|
164
171
|
end
|
172
|
+
|
165
173
|
end
|
166
174
|
|
167
175
|
end # -- end of element --
|
168
176
|
|
177
|
+
def root() @doc end
|
178
|
+
|
179
|
+
def xml()
|
180
|
+
body = scan_print(self.root.children).join
|
181
|
+
"<%s>%s</%s>" % [self.root.name, body, self.root.name]
|
182
|
+
end
|
183
|
+
|
169
184
|
private
|
170
185
|
|
171
186
|
def scan_element(a)
|
@@ -211,9 +226,6 @@ class Rexle
|
|
211
226
|
r = scan_element(a)
|
212
227
|
element.add_element(r) if r
|
213
228
|
|
214
|
-
# capture siblings
|
215
|
-
a.slice!(0, name.length + 3) if a[0, name.length + 3].join == "</%s>" % name
|
216
|
-
|
217
229
|
(r = scan_element(a); element.add_element r if r) until (a[0, name.length + 3].join == "</%s>" % [name]) or a.length < 2
|
218
230
|
else
|
219
231
|
#check for its end tag
|
@@ -228,6 +240,16 @@ class Rexle
|
|
228
240
|
end
|
229
241
|
end
|
230
242
|
|
243
|
+
def scan_print(nodes)
|
244
|
+
out = []
|
245
|
+
nodes.each do |x|
|
246
|
+
out << "<%s>" % x.name
|
247
|
+
out << scan_print(x.children)
|
248
|
+
out << "</%s>" % x.name
|
249
|
+
end
|
250
|
+
out
|
251
|
+
end
|
252
|
+
|
231
253
|
def count(path) @doc.xpath(path).flatten.compact.length end
|
232
254
|
|
233
255
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rexle
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.12
|
5
5
|
platform: ruby
|
6
6
|
authors: []
|
7
7
|
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-11-
|
12
|
+
date: 2010-11-07 00:00:00 +00:00
|
13
13
|
default_executable:
|
14
14
|
dependencies: []
|
15
15
|
|