さて、動作中の Hpricot から Libxml-ruby に切り替えたのは、速度と _why の消失のためでした。しばらく Nokogiri を検討しましたが、速度と寿命のために Libxml-ruby を検討することにしました。基本的なものが欠けているに違いありませんが、しようとしていることがうまくいきません。これが私の XML 文字列です。
<?xml version="1.0" encoding="utf-8" ?>
<feed>
<title type="xhtml"></title>
<entry xmlns="http://www.w3.org/2005/Atom">
<id>urn:publicid:xx.xxx:xxxxxx</id>
<title>US--xxx-xxxxx</title>
<updated>2009-08-19T15:49:51.103Z</updated>
<published>2009-08-19T15:44:48Z</published>
<author>
<name>XX</name>
</author>
<rights>blehh</rights>
<content type="text/xml">
<nitf>
<head>
<docdata>
<doc-id regsrc="XX" />
<date.issue norm="20090819T154448Z" />
<ed-msg info="Eds:" />
<doc.rights owner="xx" agent="hxx" type="none" />
<doc.copyright holder="xx" year="2009" />
</docdata>
</head>
<body>
<body.head>
<hedline>
<hl1 id="headline">headline</hl1>
<hl2 id="originalHeadline">blah blah</hl2>
</hedline>
<byline>john doe<byttl>staffer</byttl></byline>
<distributor>xyz</distributor>
<dateline>
<location>foo</location>
</dateline>
</body.head>
<body.content>
<block id="Main">
story content here
</block>
</body.content>
<body.end />
</body>
</nitf>
</content>
</entry>
</feed>
完全なフィードから約 150 のエントリがあります。
150 のエントリをループして、コンテンツと属性を取得したいだけですが、Hpricot で問題なく動作していた libxml-ruby で非常に苦労しています。
この小さなスニペットは、エントリを取得していないことを示しています。
parser = XML::Parser.string(file)
doc = parser.parse
entries = doc.find('//entry')
puts entries.size
entries.each do |node|
puts node.inspect
end
何か案は?ドキュメントを調べたところ、単純な XML ファイルが見つかりませんでした。x、y、z を取得するサンプルを次に示します。これはかなり単純なはずです。