nokogiri 1.4.0-x86-mswin32 → 1.4.1-x86-mswin32

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of nokogiri might be problematic. Click here for more details.

Files changed (75) hide show
  1. data/.autotest +5 -6
  2. data/CHANGELOG.ja.rdoc +47 -11
  3. data/CHANGELOG.rdoc +31 -0
  4. data/Manifest.txt +8 -1
  5. data/README.ja.rdoc +4 -3
  6. data/README.rdoc +9 -1
  7. data/Rakefile +4 -0
  8. data/deps.rip +5 -0
  9. data/ext/nokogiri/extconf.rb +4 -0
  10. data/ext/nokogiri/html_element_description.c +1 -1
  11. data/ext/nokogiri/nokogiri.c +7 -0
  12. data/ext/nokogiri/nokogiri.h +4 -1
  13. data/ext/nokogiri/xml_document.c +3 -5
  14. data/ext/nokogiri/xml_encoding_handler.c +79 -0
  15. data/ext/nokogiri/xml_encoding_handler.h +8 -0
  16. data/ext/nokogiri/xml_namespace.c +8 -0
  17. data/ext/nokogiri/xml_namespace.h +1 -0
  18. data/ext/nokogiri/xml_node.c +61 -41
  19. data/ext/nokogiri/xml_node_set.c +22 -14
  20. data/ext/nokogiri/xml_sax_parser.c +0 -3
  21. data/ext/nokogiri/xml_sax_parser_context.c +2 -0
  22. data/ext/nokogiri/xml_sax_push_parser.c +26 -3
  23. data/ext/nokogiri/xml_syntax_error.c +18 -227
  24. data/lib/nokogiri/1.8/nokogiri.so +0 -0
  25. data/lib/nokogiri/1.9/nokogiri.so +0 -0
  26. data/lib/nokogiri/css/generated_parser.rb +173 -160
  27. data/lib/nokogiri/css/generated_tokenizer.rb +4 -1
  28. data/lib/nokogiri/css/parser.y +4 -1
  29. data/lib/nokogiri/css/tokenizer.rex +2 -1
  30. data/lib/nokogiri/css/xpath_visitor.rb +2 -0
  31. data/lib/nokogiri/ffi/encoding_handler.rb +42 -0
  32. data/lib/nokogiri/ffi/html/element_description.rb +5 -9
  33. data/lib/nokogiri/ffi/libxml.rb +21 -5
  34. data/lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb +11 -0
  35. data/lib/nokogiri/ffi/structs/xml_document.rb +3 -3
  36. data/lib/nokogiri/ffi/structs/xml_sax_push_parser_context.rb +110 -1
  37. data/lib/nokogiri/ffi/xml/dtd.rb +2 -4
  38. data/lib/nokogiri/ffi/xml/node.rb +38 -17
  39. data/lib/nokogiri/ffi/xml/node_set.rb +21 -8
  40. data/lib/nokogiri/ffi/xml/reader.rb +1 -1
  41. data/lib/nokogiri/ffi/xml/sax/parser.rb +1 -8
  42. data/lib/nokogiri/ffi/xml/sax/push_parser.rb +16 -4
  43. data/lib/nokogiri/ffi/xml/syntax_error.rb +9 -2
  44. data/lib/nokogiri/ffi/xslt/stylesheet.rb +12 -9
  45. data/lib/nokogiri/version.rb +1 -1
  46. data/lib/nokogiri/xml/builder.rb +1 -1
  47. data/lib/nokogiri/xml/document.rb +35 -4
  48. data/lib/nokogiri/xml/document_fragment.rb +5 -1
  49. data/lib/nokogiri/xml/fragment_handler.rb +28 -20
  50. data/lib/nokogiri/xml/node.rb +84 -13
  51. data/lib/nokogiri/xml/node_set.rb +19 -2
  52. data/lib/nokogiri/xml/sax/push_parser.rb +1 -1
  53. data/lib/nokogiri/xml/syntax_error.rb +10 -5
  54. data/lib/nokogiri/xslt/stylesheet.rb +1 -1
  55. data/lib/xsd/xmlparser/nokogiri.rb +20 -1
  56. data/test/css/test_parser.rb +5 -0
  57. data/test/css/test_tokenizer.rb +7 -0
  58. data/test/helper.rb +0 -5
  59. data/test/html/test_document_fragment.rb +39 -1
  60. data/test/html/test_node.rb +14 -0
  61. data/test/test_encoding_handler.rb +46 -0
  62. data/test/test_memory_leak.rb +10 -0
  63. data/test/test_nokogiri.rb +5 -1
  64. data/test/test_soap4r_sax.rb +52 -0
  65. data/test/test_xslt_transforms.rb +69 -26
  66. data/test/xml/sax/test_parser_context.rb +7 -0
  67. data/test/xml/sax/test_push_parser.rb +33 -0
  68. data/test/xml/test_document.rb +27 -1
  69. data/test/xml/test_document_fragment.rb +6 -0
  70. data/test/xml/test_node.rb +63 -214
  71. data/test/xml/test_node_reparenting.rb +261 -0
  72. data/test/xml/test_node_set.rb +51 -0
  73. data/test/xml/test_syntax_error.rb +0 -15
  74. metadata +13 -4
  75. data/test/test_gc.rb +0 -15
@@ -0,0 +1,261 @@
1
+ require "helper"
2
+
3
+ module Nokogiri
4
+ module XML
5
+ class TestNodeReparenting < Nokogiri::TestCase
6
+
7
+ def setup
8
+ super
9
+ @xml = Nokogiri::XML "<root><a1>First node</a1><a2>Second node</a2><a3>Third node</a3></root>"
10
+ end
11
+
12
+ def test_add_child_should_insert_at_end_of_children
13
+ node = Nokogiri::XML::Node.new('x', @xml)
14
+ @xml.root.add_child node
15
+ assert_equal ["a1", "a2", "a3", "x"], @xml.root.children.collect {|n| n.name}
16
+ end
17
+
18
+ def test_add_child_fragment_should_insert_fragment_roots_at_end_of_children
19
+ fragment = Nokogiri::XML.fragment("<b1>foo</b1><b2>bar</b2>")
20
+ @xml.root.add_child fragment
21
+ assert_equal ["a1", "a2", "a3", "b1", "b2"], @xml.root.children.collect {|n| n.name}
22
+ end
23
+
24
+ def test_chevron_works_as_add_child
25
+ text_node = Nokogiri::XML::Text.new('hello', @xml)
26
+ assert_equal Nokogiri::XML::Node::TEXT_NODE, text_node.type
27
+
28
+ @xml.root << text_node
29
+
30
+ assert_equal @xml.root.children.last.content, 'hello'
31
+ end
32
+
33
+ def test_add_child_already_in_the_document_should_move_the_node
34
+ third_node = @xml.root.children.last
35
+ first_node = @xml.root.children.first
36
+
37
+ @xml.root.add_child(first_node)
38
+
39
+ assert_equal 2, @xml.root.children.index(first_node)
40
+ assert_equal 1, @xml.root.children.index(third_node)
41
+ end
42
+
43
+ def test_add_child_from_other_document_should_remove_from_old_document
44
+ d1 = Nokogiri::XML("<root><item>1</item><item>2</item></root>")
45
+ d2 = Nokogiri::XML("<root><item>3</item><item>4</item></root>")
46
+
47
+ d2.at('root').search('item').each do |item|
48
+ d1.at('root').add_child item
49
+ end
50
+
51
+ assert_equal 0, d2.search('item').size
52
+ assert_equal 4, d1.search('item').size
53
+ end
54
+
55
+ def test_add_child_text_node_should_merge_with_adjacent_text_nodes
56
+ node = @xml.root.children.first
57
+ old_child = node.children.first
58
+ new_child = Nokogiri::XML::Text.new('text', @xml)
59
+
60
+ node.add_child new_child
61
+
62
+ assert_equal "First nodetext", node.children.first.content
63
+ assert_equal "First nodetext", new_child.content
64
+ assert_equal "First nodetext", old_child.content
65
+ end
66
+
67
+ def test_add_child_node_following_sequential_text_nodes_should_have_right_path
68
+ node = @xml.root.children.first
69
+ node.add_child(Nokogiri::XML::Text.new('text', @xml))
70
+
71
+ item = node.add_child(Nokogiri::XML::Element.new('item', @xml))
72
+
73
+ assert_equal '/root/a1/item', item.path
74
+ end
75
+
76
+ def test_add_child_node_with_namespace_should_keep_namespace
77
+ doc = Nokogiri::XML::Document.new
78
+ item = Nokogiri::XML::Element.new('item', doc)
79
+ doc.root = item
80
+
81
+ entry = Nokogiri::XML::Element.new('entry', doc)
82
+ entry.add_namespace('tlm', 'http://tenderlovemaking.com')
83
+ assert_equal 'http://tenderlovemaking.com', entry.namespaces['xmlns:tlm']
84
+ item.add_child(entry)
85
+ assert_equal 'http://tenderlovemaking.com', entry.namespaces['xmlns:tlm']
86
+ end
87
+
88
+ def test_add_child_node_should_inherit_namespace
89
+ doc = Nokogiri::XML(<<-eoxml)
90
+ <root xmlns="http://tenderlovemaking.com/">
91
+ <first>
92
+ </first>
93
+ </root>
94
+ eoxml
95
+ assert node = doc.at('//xmlns:first')
96
+ child = Nokogiri::XML::Node.new('second', doc)
97
+ node.add_child(child)
98
+ assert doc.at('//xmlns:second')
99
+ end
100
+
101
+ def test_add_child_node_should_not_inherit_namespace_if_it_has_one
102
+ doc = Nokogiri::XML(<<-eoxml)
103
+ <root xmlns="http://tenderlovemaking.com/" xmlns:foo="http://flavorjon.es/">
104
+ <first>
105
+ </first>
106
+ </root>
107
+ eoxml
108
+ assert node = doc.at('//xmlns:first')
109
+ child = Nokogiri::XML::Node.new('second', doc)
110
+
111
+ ns = doc.root.namespace_definitions.detect { |x| x.prefix == "foo" }
112
+ child.namespace = ns
113
+
114
+ node.add_child(child)
115
+ assert doc.at('//foo:second', "foo" => "http://flavorjon.es/")
116
+ end
117
+
118
+ def test_replace_node_should_remove_previous_node_and_insert_new_node
119
+ second_node = @xml.root.children[1]
120
+
121
+ new_node = Nokogiri::XML::Node.new('foo', @xml)
122
+ second_node.replace(new_node)
123
+
124
+ assert_equal @xml.root.children[1], new_node
125
+ assert_nil second_node.parent
126
+ end
127
+
128
+ def test_replace_fragment_should_replace_node_with_fragment_roots
129
+ node = @xml.root.children[1]
130
+ fragment = Nokogiri::XML.fragment("<b1>foo</b1><b2>bar</b2>")
131
+ fc1 = fragment.children[0]
132
+ fc2 = fragment.children[1]
133
+
134
+ node.replace fragment
135
+
136
+ assert_equal 4, @xml.root.children.length
137
+ assert_equal fc1, @xml.root.children[1]
138
+ assert_equal fc2, @xml.root.children[2]
139
+ end
140
+
141
+ def test_replace_with_default_namespaces
142
+ fruits = Nokogiri::XML(<<-eoxml)
143
+ <fruit xmlns="http://fruits.org">
144
+ <apple />
145
+ </fruit>
146
+ eoxml
147
+
148
+ apple = fruits.css('apple').first
149
+
150
+ orange = Nokogiri::XML::Node.new('orange', fruits)
151
+ apple.replace(orange)
152
+
153
+ assert_equal orange, fruits.css('orange').first
154
+ end
155
+
156
+ def test_illegal_replace_of_node_with_doc
157
+ new_node = Nokogiri::XML.parse('<foo>bar</foo>')
158
+ old_node = @xml.at_css('a1')
159
+ assert_raises(ArgumentError){ old_node.replace new_node }
160
+ end
161
+
162
+ def test_replace_with_node_from_different_docs
163
+ xml1 = "<test> <caption>Original caption</caption> </test>"
164
+ xml2 = "<test> <caption>Replacement caption</caption> </test>"
165
+ doc1 = Nokogiri::XML(xml1)
166
+ doc2 = Nokogiri::XML(xml2)
167
+ caption1 = doc1.xpath("//caption")[0]
168
+ caption2 = doc2.xpath("//caption")[0]
169
+ caption1.replace(caption2) # this segfaulted under 1.4.0 and earlier
170
+ assert_equal "Replacement caption", doc1.css("caption").inner_text
171
+ end
172
+
173
+ def test_add_next_sibling_should_insert_after
174
+ node = Nokogiri::XML::Node.new('x', @xml)
175
+ @xml.root.children[1].add_next_sibling node
176
+ assert_equal ["a1", "a2", "x", "a3"], @xml.root.children.collect {|n| n.name}
177
+ end
178
+
179
+ def test_next_equals_should_insert_after
180
+ node = Nokogiri::XML::Node.new('x', @xml)
181
+ @xml.root.children[1].next = node
182
+ assert_equal ["a1", "a2", "x", "a3"], @xml.root.children.collect {|n| n.name}
183
+ end
184
+
185
+ def test_add_next_sibling_fragment_should_insert_fragment_roots_after
186
+ fragment = Nokogiri::XML.fragment("<b1>foo</b1><b2>bar</b2>")
187
+ @xml.root.children[1].add_next_sibling fragment
188
+ assert_equal ["a1", "a2", "b1", "b2", "a3"], @xml.root.children.collect {|n| n.name}
189
+ end
190
+
191
+ def test_add_next_sibling_text_node_should_merge_with_adjacent_text_nodes
192
+ node = @xml.root.children.first
193
+ text = node.children.first
194
+ new_text = Nokogiri::XML::Text.new('text', @xml)
195
+
196
+ text.add_next_sibling new_text
197
+
198
+ assert_equal "First nodetext", node.children.first.content
199
+ assert_equal "First nodetext", text.content
200
+ assert_equal "First nodetext", new_text.content
201
+ end
202
+
203
+ def test_add_previous_sibling_should_insert_before
204
+ node = Nokogiri::XML::Node.new('x', @xml)
205
+ @xml.root.children[1].add_previous_sibling node
206
+ assert_equal ["a1", "x", "a2", "a3"], @xml.root.children.collect {|n| n.name}
207
+ end
208
+
209
+ def test_previous_equals_should_insert_before
210
+ node = Nokogiri::XML::Node.new('x', @xml)
211
+ @xml.root.children[1].previous = node
212
+ assert_equal ["a1", "x", "a2", "a3"], @xml.root.children.collect {|n| n.name}
213
+ end
214
+
215
+ def test_add_previous_sibling_fragment_should_insert_fragment_roots_before
216
+ fragment = Nokogiri::XML.fragment("<b1>foo</b1><b2>bar</b2>")
217
+ @xml.root.children[1].add_previous_sibling fragment
218
+ assert_equal ["a1", "b1", "b2", "a2", "a3"], @xml.root.children.collect {|n| n.name}
219
+ end
220
+
221
+ def test_add_previous_sibling_text_node_should_merge_with_adjacent_text_nodes
222
+ node = @xml.root.children.first
223
+ text = node.children.first
224
+ new_text = Nokogiri::XML::Text.new('text', @xml)
225
+
226
+ text.add_previous_sibling new_text
227
+
228
+ assert_equal "textFirst node", node.children.first.content
229
+ assert_equal "textFirst node", text.content
230
+ assert_equal "textFirst node", new_text.content
231
+ end
232
+
233
+ def test_unlink_then_reparent
234
+ # see http://github.com/tenderlove/nokogiri/issues#issue/22
235
+ 10.times do
236
+ STDOUT.putc "."
237
+ STDOUT.flush
238
+ begin
239
+ doc = Nokogiri::XML <<-EOHTML
240
+ <root>
241
+ <a>
242
+ <b/>
243
+ <c/>
244
+ </a>
245
+ </root>
246
+ EOHTML
247
+
248
+ root = doc.at("root")
249
+ a = root.at("a")
250
+ b = a.at("b")
251
+ c = a.at("c")
252
+ a.add_next_sibling(b.unlink)
253
+ c.unlink
254
+ end
255
+ GC.start
256
+ end
257
+ end
258
+
259
+ end
260
+ end
261
+ end
@@ -9,6 +9,11 @@ module Nokogiri
9
9
  @list = @xml.css('employee')
10
10
  end
11
11
 
12
+ def test_filter
13
+ list = @xml.css('address').filter('*[domestic="Yes"]')
14
+ assert_equal(%w{ Yes } * 4, list.map { |n| n['domestic'] })
15
+ end
16
+
12
17
  def test_remove_attr
13
18
  @list.each { |x| x['class'] = 'blah' }
14
19
  assert_equal @list, @list.remove_attr('class')
@@ -526,6 +531,52 @@ module Nokogiri
526
531
  inspected
527
532
  end
528
533
 
534
+ def test_should_not_splode_when_accessing_namespace_declarations_in_a_node_set
535
+ xml = Nokogiri::XML "<foo></foo>"
536
+ node_set = xml.xpath("//namespace::*")
537
+ assert_equal 1, node_set.size
538
+ node = node_set.first
539
+ node.to_s # segfaults in 1.4.0 and earlier
540
+
541
+ # if we haven't segfaulted, let's make sure we handled it correctly
542
+ assert_instance_of Nokogiri::XML::Namespace, node
543
+ end
544
+
545
+ def test_should_not_splode_when_arrayifying_node_set_containing_namespace_declarations
546
+ xml = Nokogiri::XML "<foo></foo>"
547
+ node_set = xml.xpath("//namespace::*")
548
+ assert_equal 1, node_set.size
549
+
550
+ node_array = node_set.to_a
551
+ node = node_array.first
552
+ node.to_s # segfaults in 1.4.0 and earlier
553
+
554
+ # if we haven't segfaulted, let's make sure we handled it correctly
555
+ assert_instance_of Nokogiri::XML::Namespace, node
556
+ end
557
+
558
+ def test_should_not_splode_when_unlinking_node_set_containing_namespace_declarations
559
+ xml = Nokogiri::XML "<foo></foo>"
560
+ node_set = xml.xpath("//namespace::*")
561
+ assert_equal 1, node_set.size
562
+
563
+ node_set.unlink
564
+ end
565
+
566
+ def test_reverse
567
+ xml = Nokogiri::XML "<root><a />b<c />d<e /></root>"
568
+ children = xml.root.children
569
+ assert_instance_of Nokogiri::XML::NodeSet, children
570
+
571
+ reversed = children.reverse
572
+ assert_equal reversed[0], children[4]
573
+ assert_equal reversed[1], children[3]
574
+ assert_equal reversed[2], children[2]
575
+ assert_equal reversed[3], children[1]
576
+ assert_equal reversed[4], children[0]
577
+
578
+ assert_equal children, children.reverse.reverse
579
+ end
529
580
  end
530
581
  end
531
582
  end
@@ -7,21 +7,6 @@ module Nokogiri
7
7
  error = Nokogiri::XML::SyntaxError.new 'hello'
8
8
  assert_equal 'hello', error.message
9
9
  end
10
-
11
- def test_exception
12
- error = Nokogiri::XML::SyntaxError.new 'hello'
13
- dup = error.exception 'world'
14
- assert_equal 'hello', dup.message
15
- assert_not_equal error.message.object_id, dup.message.object_id
16
- end
17
-
18
- def test_initialize_copy
19
- error = Nokogiri::XML::SyntaxError.new 'hello'
20
- dup = error.dup
21
- assert_equal 'hello', dup.message
22
- assert_not_equal error.object_id, dup.object_id
23
- assert_not_equal error.message.object_id, dup.message.object_id
24
- end
25
10
  end
26
11
  end
27
12
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: nokogiri
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.1
5
5
  platform: x86-mswin32
6
6
  authors:
7
7
  - Aaron Patterson
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2009-10-30 00:00:00 -07:00
13
+ date: 2009-12-10 00:00:00 -08:00
14
14
  default_executable:
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
@@ -79,6 +79,7 @@ files:
79
79
  - README.rdoc
80
80
  - Rakefile
81
81
  - bin/nokogiri
82
+ - deps.rip
82
83
  - ext/nokogiri/extconf.rb
83
84
  - ext/nokogiri/html_document.c
84
85
  - ext/nokogiri/html_document.h
@@ -108,6 +109,8 @@ files:
108
109
  - ext/nokogiri/xml_element_content.h
109
110
  - ext/nokogiri/xml_element_decl.c
110
111
  - ext/nokogiri/xml_element_decl.h
112
+ - ext/nokogiri/xml_encoding_handler.c
113
+ - ext/nokogiri/xml_encoding_handler.h
111
114
  - ext/nokogiri/xml_entity_decl.c
112
115
  - ext/nokogiri/xml_entity_decl.h
113
116
  - ext/nokogiri/xml_entity_reference.c
@@ -156,6 +159,7 @@ files:
156
159
  - lib/nokogiri/css/tokenizer.rex
157
160
  - lib/nokogiri/css/xpath_visitor.rb
158
161
  - lib/nokogiri/decorators/slop.rb
162
+ - lib/nokogiri/ffi/encoding_handler.rb
159
163
  - lib/nokogiri/ffi/html/document.rb
160
164
  - lib/nokogiri/ffi/html/element_description.rb
161
165
  - lib/nokogiri/ffi/html/entity_lookup.rb
@@ -169,6 +173,7 @@ files:
169
173
  - lib/nokogiri/ffi/structs/xml_attr.rb
170
174
  - lib/nokogiri/ffi/structs/xml_attribute.rb
171
175
  - lib/nokogiri/ffi/structs/xml_buffer.rb
176
+ - lib/nokogiri/ffi/structs/xml_char_encoding_handler.rb
172
177
  - lib/nokogiri/ffi/structs/xml_document.rb
173
178
  - lib/nokogiri/ffi/structs/xml_dtd.rb
174
179
  - lib/nokogiri/ffi/structs/xml_element.rb
@@ -302,10 +307,11 @@ files:
302
307
  - test/html/test_node_encoding.rb
303
308
  - test/test_convert_xpath.rb
304
309
  - test/test_css_cache.rb
305
- - test/test_gc.rb
310
+ - test/test_encoding_handler.rb
306
311
  - test/test_memory_leak.rb
307
312
  - test/test_nokogiri.rb
308
313
  - test/test_reader.rb
314
+ - test/test_soap4r_sax.rb
309
315
  - test/test_xslt_transforms.rb
310
316
  - test/xml/node/test_save_options.rb
311
317
  - test/xml/node/test_subclass.rb
@@ -330,6 +336,7 @@ files:
330
336
  - test/xml/test_node.rb
331
337
  - test/xml/test_node_attributes.rb
332
338
  - test/xml/test_node_encoding.rb
339
+ - test/xml/test_node_reparenting.rb
333
340
  - test/xml/test_node_set.rb
334
341
  - test/xml/test_parse_options.rb
335
342
  - test/xml/test_processing_instruction.rb
@@ -401,6 +408,7 @@ test_files:
401
408
  - test/xml/test_entity_decl.rb
402
409
  - test/xml/test_schema.rb
403
410
  - test/xml/test_builder.rb
411
+ - test/xml/test_node_reparenting.rb
404
412
  - test/xml/test_attr.rb
405
413
  - test/xml/test_processing_instruction.rb
406
414
  - test/xml/test_text.rb
@@ -426,11 +434,12 @@ test_files:
426
434
  - test/xml/test_entity_reference.rb
427
435
  - test/xml/test_parse_options.rb
428
436
  - test/test_xslt_transforms.rb
437
+ - test/test_encoding_handler.rb
429
438
  - test/test_reader.rb
439
+ - test/test_soap4r_sax.rb
430
440
  - test/ffi/test_document.rb
431
441
  - test/css/test_xpath_visitor.rb
432
442
  - test/css/test_nthiness.rb
433
443
  - test/css/test_parser.rb
434
444
  - test/css/test_tokenizer.rb
435
445
  - test/test_css_cache.rb
436
- - test/test_gc.rb
data/test/test_gc.rb DELETED
@@ -1,15 +0,0 @@
1
- require "helper"
2
-
3
- class TestGc < Nokogiri::TestCase
4
-
5
- def test_dont_hurt_em_why
6
- content = File.open("#{File.dirname(__FILE__)}/files/dont_hurt_em_why.xml").read
7
- ndoc = Nokogiri::XML(content)
8
- 2.times do
9
- info = ndoc.search('status text').first.inner_text
10
- url = ndoc.search('user name').first.inner_text
11
- GC.start
12
- end
13
- end
14
-
15
- end