다음은 달성하려는 변환의 예입니다. 소스 XML :Ruby에서 스마트 태그 그룹으로 XML 구문 분석
<cats>
<cat>John</cat>
<cat>Peter</cat>
</cats>
결과 : I 소스 XML에 단 하나의 <cat>
이 경우에도 배열로 해시 결과에 'cats'
의 값을 싶습니다
{'cats' => ['John', 'Peter']}
합니다.
그래서,이 규칙을 적용 파서 싶습니다
노드
xyzs
이 이름xyz
(및 다른 노드)와 하나 개 이상의 자식 노드를 포함하면, 노드xyzs
는로 표현되어야한다 배열의 각 요소는xyz
요소의 내용이어야합니다. 여기
그것이 XmlSimple LIB 사용하여 달성 할 수있는 방법이다 : 그러나
XmlSimple.xml_in('cats.xml',{:forcearray=>['cat'], :grouptags=>{"cats"=>"cat"}})
을, 나는 대상의 모든 요소 이름에 넣어해야하고, forcearray을 정의하는 다른 방법이없는 것 같습니다/XmlSimple 내 grouptags 동작.
모든 이름을 추출한 다음 xml_in 메서드로 전달하는 사전 처리 루틴을 해킹하는 것은 어렵지 않지만 이렇게하려면 좀 더 우아한 (즉, 이미 작성된) 방법이있을 것입니다. 이 문제라면, 내 최종 목표는 MongoDB를에 결과 해시를 저장하는 것입니다 :
UPD (I는 다른 XML 파싱 LIB 그것을 할 수있는 변환의 경우를 사용하여 드리겠습니다) (즉, 전체 변환은 XML입니다 -> BSON)
UPD2 : 다시, NOT 승 요소의 이름을 지정하려면 나는 DO hich는 배열로 취급되어야하며, lib가 나에게 마법을 부탁하고 싶습니다.
이require 'inflector'
require 'nokogiri'
def get_xml_stuff(xml, singular)
plural = Inflector.pluralize(singular)
return_hash = {plural => []}
xml.xpath("*/#{plural}/#{singular}").each { |tag| return_hash[plural] << tag.text}
return return_hash
end
이 내 테스트에 따라, 당신의 XmlSimple 코드를 일치하는 간단한 사건을 해결 : 노코 기리를 사용
는 숙제처럼 소리. –
"lib 찾기 ..."로 시작하는 할당이 너무 많지 않습니다. – vorou