I'm having some issues with Nokogiri.
I am trying to parse this XML file:
<Collection version="2.0" id="74j5hc4je3b9">
<Name>A Funfair in Bangkok</Name>
<PermaLink>Funfair in Bangkok</PermaLink>
<PermaLinkIsName>True</PermaLinkIsName>
<Description>A small funfair near On Nut in Bangkok.</Description>
<Date>2009-08-03T00:00:00</Date>
<IsHidden>False</IsHidden>
<Items>
<Item filename="AGC_1998.jpg">
<Title>Funfair in Bangkok</Title>
<Caption>A small funfair near On Nut in Bangkok.</Caption>
<Authors>Anthony Bouch</Authors>
<Copyright>Copyright © Anthony Bouch</Copyright>
<CreatedDate>2009-08-07T19:22:08</CreatedDate>
<Keywords>
<Keyword>Funfair</Keyword>
<Keyword>Bangkok</Keyword>
<Keyword>Thailand</Keyword>
</Keywords>
<ThumbnailSize width="133" height="200" />
<PreviewSize width="532" height="800" />
<OriginalSize width="2279" height="3425" />
</Item>
<Item filename="AGC_1164.jpg" iscover="True">
<Title>Bumper Cars at a Funfair in Bangkok</Title>
<Caption>Bumper cars at a small funfair near On Nut in Bangkok.</Caption>
<Authors>Anthony Bouch</Authors>
<Copyright>Copyright © Anthony Bouch</Copyright>
<CreatedDate>2009-08-03T22:08:24</CreatedDate>
<Keywords>
<Keyword>Bumper Cars</Keyword>
<Keyword>Funfair</Keyword>
<Keyword>Bangkok</Keyword>
<Keyword>Thailand</Keyword>
</Keywords>
<ThumbnailSize width="200" height="133" />
<PreviewSize width="800" height="532" />
<OriginalSize width="3725" height="2479" />
</Item>
</Items>
</Collection>
I want all of that information displayed to the screen, that's it. Should be simple right? I am doing this:
require 'nokogiri'
doc = Nokogiri::XML(File.open("sample.xml"))
@block = doc.css("items item").map {|node| node.children.text}
puts @block
Each Items
is a node, and under that there are children nodes of Item
?
I create a map of this, which returns a hash, and the code in {}
goes through each node and places the children text into @block
.
Then I can display all of the child node's text to the screen.
I have no idea how far or close I am, because I've read so many articles, and am still a little confused on the basics especially since usually with a new language, I read from a file and output to the screen for a basic program.
Here I will try to explain you all the questions/confusions you are having:
No, each Items are
Nokogiri::XML::NodeSet
. And under that there are 2 children nodes of Items,which are ofNokogiri::XML::Element
class object. You can say them alsoNokogiri::XML::Node
I don't understand this. Although I tried to explain below to show what is Node,and what is Nodeset in Nokogiri. Remember
Nodeset
is a collection of Nodes.The nodes in the sample XML are capitalized, so your code should reflect that. For example: