It doesn't remove it though. I also don't want specifically to remove
the first or last node, often I want to remove one somewhere in the
middle of the array.
puts nodes.length
nodes[0].remove
puts nodes.length
when I run that code I have originally 4 nodes, and after, I still have
4 nodes. I found a way to do this but I disklike it, because it has to
search for the node every time it needs to erase it.
puts nodes.length
nodes.delete(nodes[0])
puts nodes.length
You want method #remove:
irb(main):006:0> doc =
Nokogiri::XML("<root><test>1</test><test>2</test></root>")
=> #<Nokogiri::XML:
ocument:0x832a9b2 name="document"
children=[#<Nokogiri::XML::Element:0x832a728 name="root"
children=[#<Nokogiri::XML::Element:0x8328c20 name="test"
children=[#<Nokogiri::XML::Text:0x8328a9a "1">]>,
#<Nokogiri::XML::Element:0x8328914 name="test"
children=[#<Nokogiri::XML::Text:0x832878e "2">]>]>]>
irb(main):007:0> puts doc
<?xml version="1.0"?>
<root>
<test>1</test>
<test>2</test>
</root>
=> nil
irb(main):008:0> doc.xpath('//test')
=> [#<Nokogiri::XML::Element:0x8328c20 name="test"
children=[#<Nokogiri::XML::Text:0x8328a9a "1">]>,
#<Nokogiri::XML::Element:0x8328914 name="test"
children=[#<Nokogiri::XML::Text:0x832878e "2">]>]
irb(main):009:0> doc.xpath('//test[last()]')
=> [#<Nokogiri::XML::Element:0x8328914 name="test"
children=[#<Nokogiri::XML::Text:0x832878e "2">]>]
irb(main):010:0> doc.xpath('//test[last()]').remove
=> [#<Nokogiri::XML::Element:0x8328914 name="test"
children=[#<Nokogiri::XML::Text:0x832878e "2">]>]
irb(main):011:0> puts doc
<?xml version="1.0"?>
<root>
<test>1</test>
</root>
=> nil
Kind regards
robert