2017-10-31 15 views
1

"directory"요소의 모든 텍스트 노드를 문자열 배열에 저장하려고합니다. 반환 된 빈 배열을 가져 오는 중 왜 배열이 비어 있는지 알 수 없습니다.배열에 XML 텍스트 노드 저장

여기 여기에 XML을

<config> 
    <directories> 
     <directory>directory1</directory> 
     <directory>directory2</directory> 
    </directories> 
</config> 

있어 내가 무엇을 놓치고 루비 코드

require 'nokogiri' 

directories = [] 
directories.each do |directory| 
    directory = config.at('//config/directories').text 
end 

이야?

답변

1

빈 배열을 반복하기 때문입니다. 생성 한 배열 directories에는 내용이 없기 때문에 빈 배열을 얻으면 반복에서 내용을 디렉토리에 할당 할 때 그 이유가됩니다.

대신 구문 분석 된 XML 반복 다음과 같이 밀어보십시오 :

xml_structure = <<-XML 
<config> 
    <directories> 
    <directory>directory1</directory> 
    <directory>directory2</directory> 
    </directories> 
</config> 
XML 

doc = Nokogiri::XML(xml_structure) 
directories = [] 
doc.xpath('//config/directories/directory').each do |directory| 
    directories.push directory.text 
end 
p directories 
# ["directory1", "directory2"] 

또는 사용지도가 당신도 할 수 있습니다

doc = Nokogiri::XML(xml_structure) 
p doc.xpath('//config/directories/directory').map(&:text) 
# ["directory1", "directory2"] 
+0

완벽한, 감사합니다! –

+0

@ Tom을 환영합니다. –