2011-09-18 4 views
0

진행 방법에 대한 구체적인 예를 찾으려고 노력했습니다. 내보내기/가져 오기 사용을 위해 XML 파일을 작성합니다. 이 파일을 응용 프로그램에서 내보내고 가져올 때이 XML 파일을 기반으로 데이터베이스에 새 레코드를 만들려고합니다. 모델 간의 관계가 손상되지 않았습니다.Nokogiri로 중첩 된 XML 파일을 구문 분석하려고 시도했습니다.

몇 가지 질문이있는 카테고리가 있습니다. 각 질문에는 하나 이상의 질문을 유발할 수있는 몇 가지 답변이 있습니다. 나는 다르게 그 xml 파일을 준비해야하는 경우 https://gist.github.com/1225431

나 자신에 의해 그 일을하고, 나는 또한 제안에 열려입니다 :

나는 나의 xml 파일의 단순화 된 버전을했다.

questions = doc.css('questions') 

여기가 바로 지금 시작 지점입니다. 내가 찾은 모든 사례는 완전히 다른 종류의 문제 (또는 그렇게 느낀다)를위한 것입니다.

이 작업에 올바른 도구를 사용하고 있습니까? 어떤 도움을 주셔서 감사합니다.

답변

1

Nokogiri는 Ruby 용 XML/HTML 파싱 라이브러리로서 훌륭한 도구입니다. XML 문서를 파싱하기 때문에 CSS 선택기 대신 XPath을 사용해야합니다. 다행히도 Nokogiri has you covered.

Nokogiri 설명서에는 몇 가지가 있습니다. basic, helpful usage tutorials. This one에 질문에 대한 답변이 있습니다.

다음은 질문과 관련된 코드 예제입니다. 다행히도 시작하면 충분합니다.

require 'nokogiri' 

# Reads the `example.xml` file from the current directory. 
file = File.read("example.xml") 

# Uses Nokogiri::XML to parse the file. 
doc  = Nokogiri::XML(file) 

# Iterate over each <question> element and print 
# the text inside the first <name> element of each. 
doc.xpath("//question").each do |q| 
    puts q.at("name").text 

    # Iterate over each <selection> element within the 
    # current question and print its <name> and <conditional> 
    # line "name: conditional" 
    q.xpath("./selection").each do |selection| 
     puts "#{selection.at("name").text}: #{selection.at("conditional").text}" 
    end 

    # Same as above, but use variables. 
    q.xpath("./selection").each do |selection| 
     name    = selection.at("name").text 
     conditional = selection.at("conditional").text 

     puts "#{name}: #{conditional}" 
    end 
end 
+0

답장을 보내 주셔서 감사합니다. 나는 xpath와 CSS를 모두 시도했지만 항상 멈추었다. 나는 이것으로 내 길을 kludging했다. 각 유형, 질문 및 선택 항목에 대해 자체 노드 세트를 만들었습니다. 그리고 나서 그것들을 데이터베이스 내부에 넣기 위해 물결 모양으로 반복합니다. 예쁘지는 않지만 적어도 작동합니다. – thepanu

+0

nokogiri.org의 튜토리얼을 읽고 읽었지만 내 머리를 감쌀 수 없었습니다. – thepanu

+0

한 가지 질문. 이'doc.xpath ("// question")'는 선택 안에있는 질문을 조건 적 질문으로 선택하지 않겠는가? 그게 내 두통 이었어. – thepanu

관련 문제