2

tumblr ブログから自分の Web サイトへの RSS フィードを解析中です。私がやろうとしているのは、jQuery を使用して、フィードから特定の情報を解析することです。以下にスニペットを示します。

<rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0">
<channel>
<atom:link xmlns:atom="http://www.w3.org/2005/Atom" rel="hub" href="http://tumblr.superfeedr.com/"/>
[lots of stuff]
</channel>
</rss>

ここで、フィードからhref="http://tumblr.superfeedr.com/"を取得します。これにより、フィードが実際に tumblr ブログからのものであることを確認できます。

問題は、しかし、私はそれを行う方法に関して少し立ち往生していることです. 私は以下を使用しようとしています:

$.get(blogUrl, 
function(data) {
    var xml = $(data);          
    var foo = xml.find('atom:link').attr('href');
    alert("link href=" + foo);
});

blogUrl は、問題の RSS フィードの URL です。私はこれについて多くのバリエーションを試しました - あまりにも多くのことで私はサークルに行き始めました - そこで私はここで尋ねたいと思いました. 「atom:link」を「atom\:link」に変更し、find コマンドの末尾に「.text()」を追加しようとしましたが、うまくいきませんでした。また、最初の atom:link データを除いて、チャネル全体の全文を取得することもできます。これは近いですが正しくもありません!

では、どうすれば自分が求めている情報を入手できますか? 私が見たすべてのコードガイドと以前の質問は、RSS フィードで複数の繰り返し項目を繰り返すことに焦点を当てています (これは、RSS フィードで行うべきことなので当然のことです)。選択したフィードが期待される適切な種類のフィードであることを確認します。

ありがとう!


更新: Jasd からの以下のヘルプのおかげで、これを機能させることができました。これが更新されたコードです。

$.get(blogUrl, 
    function(data) {    
        var doc = data.getElementsByTagNameNS("http://www.w3.org/2005/Atom", "link")[0];
        var href = dic.getAttribute("href");
    }
4

1 に答える 1

1

のようなコロンで区切られたタグ名atom:linkは、別の名前空間 ( は名前空間) で定義されたタグを参照するため、atom名前空間なしではクエリできません。さらに、タグを探している名前空間の URL を提供する必要があります。

これは Chrome での動作です (IE を除く他のすべてのブラウザーでそう思います) (簡潔にするためにエラーチェックは省略されています)。

var xmlString = "<rss...>...</rss>";
var doc = new DOMParser().parseFromString(xmlString, "text/xml");
var elem = doc.getElementsByTagNameNS("http://www.w3.org/2005/Atom", "link")[0];
var href = elem.getAttribute("href");

jQuery が、これから抽象化してすべてのブラウザーで動作する機能を提供するかどうかはわかりません。そうでない場合は、ActiveXObject代わりDOMParserに IE で使用します ( JavaScript での変数文字列の XML 解析も参照してください)。

更新: jQuery を使用する場合$(doc).find("atom\\:link").attr("href")、名前空間でタグをクエリするために使用できます (詳細については、 http: //www.rfk.id.au/blog/entry/xmlns-selectors-jquery/ を参照してください)。名前空間はさらに簡単です)。

于 2013-01-05T13:10:50.247 に答える