당신의 예를 정말 반환해야하는지의 잘 정의 된 정의를 제공하지 않습니다. 텍스트 노드가 무시됩니까? 요소에 자식 요소가 여러 개있는 경우 어떻게됩니까? 외부 <div>
요소의 속성이 children
인 경우 어떻게됩니까?
XML/HTML 구문 분석 라이브러리의 기본 제공 데이터 구조를 사용하고 XPath 쿼리를 사용하여 도착하는 방법이있는 경우에는 이와 같은 구조를 작성하지 않아야합니다 원하는 데이터 노드.
위의 내용을 모두 무시하고 다음과 같은 간단한 시작을 생각해보십시오.
require "nokogiri"
class Nokogiri::XML::Node
def to_hash
# Build hash of attributes. Attribute values are split into arrays.
contents = Hash[attributes.collect { |name, value|
[name.to_sym, value.to_s.split(/\s+/)] }]
# Add array of child hashes recursively.
if element_children.any?
contents[:children] = element_children.collect { |child| child.to_hash }
end
# Return new hash with the element name as single key.
{ name.to_sym => contents }
end
end
사용은 다음과 같이
doc = Nokogiri::XML('<div class="class-1 class-2" id="my-id">
<div class="classy">
</div>
</div>')
doc.root.to_hash
#=> { :div =>
# { :class => ["class-1", "class-2"],
# :children =>
# [ { :div =>
# { :class => ["classy"] }
# } ],
# :id => ["my-id"]
# }
# }
올바른 방향으로 나를 지적 주셔서 감사합니다 : 여기 결과입니다 : http://github.com/kuroir/Nokogiri-to-Hash – MarioRicalde