こんにちは、私はhttp://rss.news.yahoo.com/rss/entertainmentのようなライブURLからxml/rssを(jqueryではなく)純粋なJavaスクリプトを使用して解析します。私はたくさんのグーグルで探せました。何も私のために働かなかった。誰でもコードの作業に役立つことができます。Javaスクリプトを使用してURLからXML/RSSを解析する
答えて
をチェックしたJSONオブジェクトを印刷する必要がある場合は、worked around the Same Origin Policyを持っていたら(あなたが。多くのことをGoogleで検索していることができない)、およびリソースがXML MIME type(これit is in this case、で提供された場合に変換した後http://jsontoxml.utilities-online.info/
text/xml
)、次の操作を実行できます。
var x = new XMLHttpRequest();
x.open("GET", "http://feed.example/", true);
x.onreadystatechange = function() {
if (x.readyState == 4 && x.status == 200)
{
var doc = x.responseXML;
// …
}
};
x.send(null);
(他のイベントハンドラの小道具にもAJAX、およびXMLHttpRequest Level 2仕様[ワーキングドラフト]を参照してください。
本質的に:構文解析は必要ありません。 XMLデータにアクセスする場合は、標準のDOM Level 2+ CoreまたはDOM Level 3 XPathのメソッドを使用します(例:
/* DOM Level 2 Core */
var title = doc.getElementsByTagName("channel")[0].getElementsByTagName("title")[0].firstChild.nodeValue;
/* DOM Level 3 Core */
var title = doc.getElementsByTagName("channel")[0].getElementsByTagName("title")[0].textContent;
/* DOM Level 3 XPath (not using namespaces) */
var title = doc.evaluate('//channel/title/text()', doc, null, 0, null).iterateNext();
/* DOM Level 3 XPath (using namespaces) */
var namespaceResolver = (function() {
var prefixMap = {
media: "http://search.yahoo.com/mrss/",
ynews: "http://news.yahoo.com/rss/"
};
return function (prefix) {
return prefixMap[prefix] || null;
};
}());
var url = doc.evaluate('//media:content/@url', doc, namespaceResolver, 0, null).iterateNext();
(jQueryのを使用していない便利な、名前空間を認識するDOM 3 XPathのラッパーのためにもJSX:xpath.jsを参照してください。)
しかし、いくつかの(間違った)理由MIMEタイプがXMLのMIMEでない場合DOM実装で認識されない場合は、最新のブラウザに組み込まれているパーサの1つを使用して、responseText
プロパティ値を解析することができます。 IE/MSXMLで動作するソリューションについては、pradeek's answerを参照してください。以下は他の場所でも有効です:
var parser = new DOMParser();
var doc = parser.parseFromString(x.responseText, "text/xml");
上記のように処理してください。
ランタイムに機能テストを使用して、特定の実装の正しいコードブランチを判断します。最も簡単な方法は次のとおりです。
if (typeof DOMParser != "undefined")
{
var parser = new DOMParser();
// …
}
else if (typeof ActiveXObject != "undefined")
{
var xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
// …
}
もDOMParser
とHTML5: DOM Parsing and Serialization (Working Draft)参照してください。
大きな問題は、一般的に、データのクロスドメインを取得できないことです。これはほとんどのRSSフィードで大きな問題です。
JavaScriptのクロスドメインでデータを読み込むことに対処する一般的な方法は、JSONPを呼び出すことです。基本的には、取得しているデータがjavascriptコールバック関数にラップされていることを意味します。スクリプトタグを使用してURLをロードし、コードで関数を定義します。したがって、スクリプトがロードされると、関数が実行され、引数としてデータが渡されます。
ほとんどのxml/rssフィードの問題は、xmlのみを提供するサービスがJSONPラッピング機能を提供しない傾向があることです。
さらに先に進む前に、データソースにJSON形式とJSONP機能があるかどうかを確認してください。それはこれをもっと簡単にします。
データソースがにjsonとjsonpの機能を提供していない場合は、クリエイティブを取得する必要があります。
これを処理する比較的簡単な方法は、プロキシサーバーを使用することです。あなたのプロキシはあなたのコントロール下のどこかで動作し、データを得るための仲介者として機能します。サーバーはあなたのxmlを読み込み、あなたのjavascriptは代わりにリクエストを行います。プロキシサーバーが同じドメイン名で実行されている場合、標準のxhr(ajax)要求を使用するだけで、ドメイン間の関係について心配する必要はありません。
また、プロキシサーバーはjsonpコールバックでデータをラップすることができ、上記の方法を使用できます。
jQueryを使用している場合、xhrおよびjsonpリクエストは組み込みのメソッドであり、コーディングを非常に簡単にします。他の一般的なjsライブラリもこれらをサポートする必要があります。これを最初からすべてコーディングしている場合は、もう少し作業はしますが、それほど難しくはありません。
これで、一度データがうまくいけば、ちょうどjsonになります。その後、解析は必要ありません。
しかし、xml/rssのバージョンに固執することになり、jQueryの場合は、単にjQuery.parseXML http://api.jquery.com/jQuery.parseXML/を使用するだけです。
xmlをjsonに変換することをお勧めします。このチュートリアル http://www.w3schools.com/json/json_eval.asp
XMLのJSONへの変換は、XMLネームスペースが考慮されている場合には構文が分かりやすく(短くて優れたアクセスアクセッサ)役立ちますが、不要であり、結果として得られるデータ構造はXMLドキュメント(JSPath、JSSLT誰でも?)。 (残念ながら、最初のURIは404と互換性があります)BTW、W3Schools(W3Cとは何の関係もない)は、間違った情報が満載のサイトです。 – PointedEars
Webサイトがオンラインに戻ったので、私はコンバータを見直すことができました。それは本当に悪くないです。名前空間とUnicodeが考慮されます。属性名は "-'" -prefixedです。同じ名前のノードは配列に関係します。パーサエラーもシリアル化されます。しかし、改善の余地がある。例:すべてのシリアル化された値は文字列です。ブール値の属性の場合、単純にJSONの一部である「true」でオーバーヘッドを少しだけ節約することができました。そして、変換は全身的ではありません(toJSON(toXML(json))!= json。 – PointedEars
@NathanSri最初のリンクが死んでいる、あなたの答えを更新できますか? – Hugo
jQueryを使用すると何が問題になりますか? (それは事をもっと簡単にします) – Nathan
jQueryを試してみませんか? – Raptor
申し訳ありません。このタスクではJava Scriptのみを使用する必要があります。 –