Вставка и удаление использования узлов и элементов XML Nokogiri

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) переменные внешний из функции.

16
задан the Tin Man 8 October 2015 в 00:20
поделиться

3 ответа

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>
16
ответ дан 30 November 2019 в 21:46
поделиться

Вы можете сделать это так:

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» всех элементов заметки. Я думаю, что inner_text неприменим для Nokogiri :: XML :: Element.

Я не уверен, как «изменить inner_text» всех элементов заметки. Я думаю, что inner_text неприменим для Nokogiri :: XML :: Element.

3
ответ дан 30 November 2019 в 21:46
поделиться

Предыдущий пример 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>
3
ответ дан 30 November 2019 в 21:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: