Могу ли я использовать ruby ​​для редактирования XML-файла на месте, как с Nokogiri? - PullRequest
0 голосов
/ 16 декабря 2010

Я знаю, как разобрать XML-документ с помощью Nokogiri. У меня есть один элемент, в котором я хочу пересортировать текстовые строки, поэтому я думал о редактировании на месте или просто о написании всего нового файла. Кто-нибудь может помочь?

1 Ответ

0 голосов
/ 16 декабря 2010

Вот пример, вам, конечно, придется изменить это для работы с вашим XML.

Учитывая, что ваш XML выглядит примерно так:

<top>
  <node1>
    <value>mmm</value>
    <value>zzz</value>
    <value>ccc</value>
  </node1>
  <anothernode>
    <value>zzz</value>
    <value>ccc</value>
  </anothernode>
</top>

И если вы хотитесделать потомки узла 1 в алфавитном порядке по значению, вы можете сделать:

n = Nokogiri::XML(the_xml_i_wrote_above)
node1 = n.xpath("//node1").first
sorted_children = node1.children.sort{|x,y| x.text <=> y.text }
node1.children.each {|x| x.unlink }
sorted_children.each {|x| node1 << x}

И тогда n.to_s должно быть равно:

<top>
  <node1>
    <value>ccc</value>
    <value>mmm</value>
    <value>zzz</value>
  </node1>
  <anothernode>
    <value>zzz</value>
    <value>ccc</value>
  </anothernode>
</top>

Могут быть более эффективные способыдля этого, в частности, я искал документированный способ отсоединения всех дочерних элементов одновременно (может, node1.children = []?) или способ Nokogiri для сортировки узлов.Посмотрите на Документы Нокогири , чтобы узнать, как это сделать.

...