2

ActiveResource を使用して、HTML ドキュメントに似た Web サービスを解析しようとしましたが、404 エラーが発生し続けました。

このタスクには、ActiveResource の代わりに XML パーサーを使用する必要がありますか?

私の推測では、ActiveResource が役立つのは、別の Rails アプリのデータを使用していて、XML データを Rails モデルに簡単に変換できる場合だけです。たとえば、Web サービスが HTML ドキュメントや RSS フィードなどのより広範な XML である場合は、hpricot や nokogiri などのパーサーを使用する必要があります。これは正しいです?

XML パーサーを使用するタイミングと ActiveResource を使用するタイミングをどのように判断しますか?

4

2 に答える 2

7

更新: ActiveResource も XML パーサーではありません。これは、ActiveRecord モデルと同様の方法でリモート リソースと対話できるようにする REST コンシューマーです。内部で XML パーサーを使用します (以下に示す ActiveSupport の XmlMini を使用していると想定しています)。

ActiveResource には、XML コンテンツの構造に関するいくつかの厳密な要件があり、別の Rails アプリケーションの REST API とやり取りするときに最適に機能します。HTML ページの一般的なスクリーン スクレイピングを行うことは意図されていません。そのためには、ノコギリを直接使用してください。


ActiveSupport は XML パーサーではなく、便利な Ruby メソッドとクラスのさまざまなコレクションです。ただし、多くの異なる XML パーサーのラッパーを提供し、一貫したインターフェイスを提供します。

どの XML パーサーが使用されているかを確認し、別の XML パーサーに切り替えることができます。でこれを試してくださいscript/console

ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_REXML
ActiveSupport::XmlMini.backend = 'Nokogiri'
ActiveSupport::XmlMini.backend # => ActiveSupport::XmlMini_Nokogiri
# it will now use Nokogiri

ただし、厳密で有効なマークアップを前提とする Nokogiri の XML パーサーは引き続き使用されます。ほとんどの HTML ページはこの厳格な要件に適合しないため、ActiveSupport を使用する代わりに Nokogiri の HTML パーサーを直接使用することをお勧めします。

doc = Nokogiri::HTML(...)
于 2009-08-10T15:13:13.730 に答える
4

同じ質問に答えたかったので、XmlMini を作成しました。XmlMini はそれほど多くのことを行うわけではないので、集中し続けることができます。しかし、YAML または JSON が処理する資格がないという問題がある場合、XmlMini もその仕事をするつもりはありません。

たとえば、扱っている XML の構造を検証する必要がある場合、XmlMini はツールではありません。手で検証するのはひどいです。

同様に、UBL、OpenDoc、または Atom のスニペットを含めるなど、他の場所からの標準的な要素と属性のセマンティクスを再利用するデータを扱っている場合は、名前空間用のより優れたツールを入手する必要があります。

ryanb は Nokogiri について言及していますが、これ以上素晴らしいものは思いつきません。Ruby のほとんどのライブラリよりも洗練された libxml のすべての機能を備えています。XML の構文解析だけを意味しているわけではありません。_why の最高のプロジェクトと同じです。

しかし、ノコギリでさえ設計されていないことがいくつかあります. 本当に、絶対に、積極的に、部屋のすべての角括弧を猛スピードで殺す必要がある場合は、SAX を破壊する必要があります。しかし、それほど速度が必要な場合は、Ruby で実行しないでください。純粋なCを使用してexpatまたはlibxmlで実行します。または、まったく実行しないでください。

于 2009-11-16T11:01:56.860 に答える