2010-12-16 6 views

답변

0

예를 들어 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 방법의 링크를 해제하는 문서화 된 방법을 찾고 있습니다. 이 작업을 수행하는 다른 방법은 Nokogiri docs을 참조하십시오.

+1

노드를 이동하기 전에 링크를 해제 할 필요가 없습니다. 노드는 트리의 한 지점에만있을 수 있으므로 요소에 요소를 추가하면 자동으로 이전 요소에서 제거됩니다. 몇 가지 사소한 개선점을 보여주는 코드의 [짧은 재 작성] (https://gist.github.com/745244)을 작성했습니다. – Phrogz

+0

두 분 모두 감사합니다. – AKWF

관련 문제