2

私はActiveResourceを使ってHTML文書のようなWebサービスを解析しようとしましたが、私は404エラーを受け取りました。XMLパーサーをいつ使用するのか、ActiveResourceをいつ使用するのかを知りませんか?

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

おそらく、ActiveResourceは、別のRailsアプリケーションからデータを消費し、XMLデータをRailsモデルに簡単に変換できる場合にのみ便利です。たとえば、WebサービスがHTMLドキュメントやRSSフィードのような幅広いXMLの場合、hpricotやnokogiriのようなパーサを使用したいと考えています。これは正しいです?

XMLパーサーをいつ使用するのか、ActiveResourceをいつ使用するのかを知りませんか?

答えて

7

更新: ActiveResourceはXMLパーサでもありません。これは、RESTコンシューマで、ActiveRecordモデルと同じようにリモートリソースとやりとりすることができます。それはフードの下でXMLパーサーを使用します(私は、以下に示すActiveSupportのXmlMiniを使用していると仮定しています)。

ActiveResourceには、XMLコンテンツの構造に関するいくつかの厳しい要件があり、他のRailsアプリケーションのREST APIと対話するときに最も効果的です。これは、HTMLページの一般的なスクリーンスクレイピングを行うためのものではありません。そのためにはNokogiriを直接使用してください。


ActiveSupportはXMLパーサーではなく、有用なRubyのメソッドとクラスのさまざまなコレクションです。しかし、それはあなたに一貫したインターフェイスを与える多くの異なるXMLパーサーの周りのラッパーを提供しています。

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

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

doc = Nokogiri::HTML(...) 
+0

ありがとう、Ryan!私は、ActiveSupportを使ってモデルを定義し、あるアプリから別のアプリにデータを渡すための最初のスクリーンキャストで示した指示に実際に従っていました。私はリソースがブラウザで利用可能であっても、404を得続けました。だから私はおそらく、ActiveSupportに受け入れられない外部サービスから来るデータのフォーマットと関係があると思ったのです。 – chimp

+0

どのエピソードを参照していますか?あなたはActiveResourceを意味しますか? – ryanb

+0

Dammit、私はActiveSupportについて話していました。謝罪いたします。 – chimp

4

私は同じ質問に答えるためにXmlMiniを書きました。 XmlMiniは実際にはあまり効果がありません。しかし、YAMLまたはJSONが処理する資格がないという問題がある場合、XmlMiniはその処理を実行しません。

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

同様に、UBL、OpenDoc、またはAtomのスニペットを含むような標準的な要素と属性のセマンティクスを再利用するデータを扱う場合、実際には名前空間のためのより良いツールが必要です。

ryanbはNokogiriについて言及しています。私はこれらのことについてもっと素晴らしいことは考えられません。それはRubyのほとんどのライブラリよりも優雅なlibxmlの力を持っています。私はXML解析を意味するだけではありません。

しかし、ノコギリでさえも設計されていないものがいくつかあります。あなたが本当に、絶対に、壊れた首のスピードで部屋のすべての角括弧を確実に殺す必要があるならば、あなたはSAXをバストしなければなりません。しかし、あなたがそれほどスピードを必要とするなら、Rubyでやってはいけません。 expatやlibxmlで純粋なC言語で行うか、まったくやってはいけません。

関連する問題