private Random gen = new Random();
DateTime RandomDay()
{
DateTime start = new DateTime(1995, 1, 1);
int range = (DateTime.Today - start).Days;
return start.AddDays(gen.Next(range));
}
Для лучшей производительности, если это будут неоднократно называть, создайте start
и gen
(и возможно даже range
) переменные внешний из функции.
Nokogiri упрощает эту задачу. Используя этот документ в качестве примера, следующий код найдет все теги Vitamins
, удалит их дочерние элементы (а также детей детей и т. Д.) И изменит их внутренний текст, чтобы сказать «Дети удалено. ":
require 'nokogiri'
io = File.open('sample.xml', 'r')
doc = Nokogiri::XML(io)
io.close
doc.search('//vitamins').each do |node|
node.children.remove
node.content = 'Children removed.'
end
Заданный узел food
изменится с этого:
<food>
<name>Avocado Dip</name>
<mfr>Sunnydale</mfr>
<serving units="g">29</serving>
<calories total="110" fat="100"/>
<total-fat>11</total-fat>
<saturated-fat>3</saturated-fat>
<cholesterol>5</cholesterol>
<sodium>210</sodium>
<carb>2</carb>
<fiber>0</fiber>
<protein>1</protein>
<vitamins>
<a>0</a>
<c>0</c>
</vitamins>
<minerals>
<ca>0</ca>
<fe>0</fe>
</minerals>
</food>
на этот:
<food>
<name>Avocado Dip</name>
<mfr>Sunnydale</mfr>
<serving units="g">29</serving>
<calories total="110" fat="100"/>
<total-fat>11</total-fat>
<saturated-fat>3</saturated-fat>
<cholesterol>5</cholesterol>
<sodium>210</sodium>
<carb>2</carb>
<fiber>0</fiber>
<protein>1</protein>
<vitamins>Children removed.</vitamins>
<minerals>
<ca>0</ca>
<fe>0</fe>
</minerals>
</food>
Вы можете сделать это так:
doc=Nokogiri::XML(your_document)
note=doc.search("note") # find all tags with the node_name "note"
note.remove
Хотя это приведет к удалению всех дочерних элементов в теге
, Я не уверен, как «изменить inner_text» всех элементов заметки. Я думаю, что inner_text
неприменим для Nokogiri :: XML :: Element.
inner_text
неприменим для Nokogiri :: XML :: Element. Я не уверен, как «изменить inner_text» всех элементов заметки. Я думаю, что inner_text
неприменим для Nokogiri :: XML :: Element. Предыдущий пример Nobogiri устанавливает меня в правильном направлении, но с использованием DOC.Search
оставил неработавшие // Витамины
, поэтому я использовал CSS:
require "rubygems"
require "nokogiri"
f = File.open("food.xml")
doc = Nokogiri::XML(f)
doc.css("food vitamins").each do |node|
puts "\r\n[debug] Before: vitamins= \r\n#{node}"
node.children.remove
node.content = "Children removed"
puts "\r\n[debug] After: vitamins=\r\n#{node}"
end
f.close
, что приводит к:
debug] Before: vitamins=
<vitamins>
<a>0</a>
<c>0</c>
</vitamins>
[debug] After: vitamins=
<vitamins>Children removed</vitamins>