XML 파일에서 임의의 행을 읽기 단어 혼다 또는 도요타.나는 같은 XML 파일이
나는 Nokogiri 인 반면, 레일 3. Array#sample
은 레일 3에서 자동으로 사용할 수있는 ActiveSupport 3 기능입니다
XML 파일에서 임의의 행을 읽기 단어 혼다 또는 도요타.나는 같은 XML 파일이
나는 Nokogiri 인 반면, 레일 3. Array#sample
은 레일 3에서 자동으로 사용할 수있는 ActiveSupport 3 기능입니다
require 'nokogiri'
def random_car
doc = Nokogiri::XML.parse(File.open('cars.xml'))
cars = doc.xpath('//car').to_a
cars.sample.try(:text)
end
주를 사용하여 페이지 요청에 따라 임의의 행을 표시하는 웹 사이트에 대한이 사용하고 (Gemfile에 추가해야하는) 보석.
Object#try
을 사용하면 Array#sample
은 배열이 비어 있으면 nil을 반환하므로 XPath 검색과 일치하는 것이 없으면 함수가 여전히 작동합니다 (nil을 반환합니다).
XML 파일이 큰 경우이 작업을 빠르게하려면 상수처럼 자동차 목록을 어딘가에 캐시하십시오. 이것은 모든 파일을 다시로드하지는 않으므로 XML 파일이 변경 될 것으로 예상되는 경우이 작업을 원하지 않을 수 있습니다. 여기
CARS = Nokogiri::XML.parse(File.open('cars.xml')).xpath('//car').to_a
def random_car
CARS.sample.try(:text)
end
내가 그것에 대해 가고 싶어하는 방법은 다음과 같습니다
require 'nokogiri'
# added some cars to make it more interesting
xml = <<EOT
<root>
<car>honda</car>
<car>toyota</car>
<car>ford</car>
<car>edsel</car>
<car>de lorean</car>
<car>nissan</car>
<car>bmw</car>
<car>volvo</car>
</root>
EOT
doc = Nokogiri::XML(xml)
# doc.search('car') returns a nodeset.
# to_a converts the nodeset to an array.
# shuffle returns a randomly sorted array.
# first returns the element 0 from the randomly sorted array.
# to_xml merely converts it back to the text representation of the XML so it's easy to see what was selected.
doc.search('car').to_a.shuffle.first.to_xml # => "<car>toyota</car>"
doc.search('car').to_a.shuffle.first.to_xml # => "<car>edsel</car>"
doc.search('car').to_a.shuffle.first.to_xml # => "<car>volvo</car>"
그것이 오타하지만 닫는 루트 노드가/ – corroded
좋은 캐치 @corroded이없는 것 같아요. 나는 그것을 고쳤다. –