Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 我可以像Nokogiri一样使用ruby就地编辑XML文件吗?_Ruby On Rails_Ruby_Nokogiri - Fatal编程技术网

Ruby on rails 我可以像Nokogiri一样使用ruby就地编辑XML文件吗?

Ruby on rails 我可以像Nokogiri一样使用ruby就地编辑XML文件吗?,ruby-on-rails,ruby,nokogiri,Ruby On Rails,Ruby,Nokogiri,我知道如何使用Nokogiri解析XML文档。我有一个元素,我想对文本字符串重新排序,所以我想要么就地编辑,要么只是编写一个全新的文件。有人能帮忙吗?这里有一个例子,当然,您必须修改它才能使用XML 给定您的XML是这样的: <top> <node1> <value>mmm</value> <value>zzz</value> <value>ccc</value> &l

我知道如何使用Nokogiri解析XML文档。我有一个元素,我想对文本字符串重新排序,所以我想要么就地编辑,要么只是编写一个全新的文件。有人能帮忙吗?

这里有一个例子,当然,您必须修改它才能使用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_应等于:

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

可能有更有效的方法来实现这一点,特别是我正在寻找一种有文档记录的方法来同时取消所有子项的链接,可能是node1.children=[]?或者使用Nokogiri方法对节点进行排序。请查看以获取其他方法。

注意,移动节点之前无需取消节点链接。节点只能位于树中的一个点中,因此将其附加到元素会自动将其从旧点移除。我已经发布了你的代码,显示了一些小的改进。谢谢你们,这是很棒的东西