2012-02-12 8 views
1

遠いXMLドキュメントから要素を取得するためにXPathを使用すると、次のとおりです。グリースモンキー:Imは私のGreasemonkeyスクリプトを使ってやろうと何

  • いくつかの遠いXMLドキュメントを読み込みます。

  • これをXMLオブジェクトに変換します。

  • XPathを使用して内部の要素を取得します。

getElementsByTagNameの(のTagName)方法は、私のXMLオブジェクトに正常に動作しますが、は( "XPath式")を評価はしていません。助言がありますか?以下のコードを参照してください:

GM_xmlhttpRequest({ 
    method: "GET", 
    url: "http://www.someserver.com/atom.xml", 
    onload: function(response) { 
     if (!response.responseXML) { 
     var xmlDoc = new DOMParser().parseFromString(response.responseText, "application/xml"); 
     } 

// this section works fine and returns the data of the first <entry>..</entry> 
     var snapEntries = xmlDoc.getElementsByTagName("entry"); 
      alert (snapEntries[0].data); 

// this section doesn't work for unknown reason and returns nothing   
     var snapEntriesXpath = xmlDoc.evaluate("//entry", xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 
      alert (snapEntriesXpath.snapshotItem(0).data); 
    } 
}); 

答えて

1

IIRCを、.data属性は、検索の種類ごとに存在することはありません。

あなたはおそらくが使用する必要があります。

var snapEntriesXpath = xmlDoc.evaluate (
    "//entry//text()", xmlDoc, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null 
); 

しかし、他のいくつかの問題が遊びである可能性があります。そうでない場合は、(1)正確なXMLファイルにリンクしてください。必要に応じてpastebin.comを使用してください。 (2)Firefoxのエラーコンソール(Ctrlシフト )を報告します。

+0

いいえ。それは非暴言XPath評価の理由とは思われません。上記のコードでalert(snapEntries.length)とalert(snapEntriesXpath.snapshotLength)を追加することができます。最初のケースではエントリの数が再計算され、2番目の場合は0が返されます。 – user1199523

+0

XML文書はあなたの考えではなく、 'evaluate'文を編集したものです。このコードは、適切なXML文書で動作します。確認するために再テストしました。 XPathは大文字と小文字を区別します。要求された情報を提供する。 –

+0

OK。 XML文書には何か問題があるはずです(ただし、標準的なブロガーのフィード・アトムです)。まあ、正規表現を使って* response.responseText *を解析する方がはるかに高速です:) – user1199523

関連する問題