3

OK、これをできるだけ簡単に説明しようと思います。

jQueryを使用して、Webサービスから取得したXMLを解析しようとしています。神への愛のために、「イメージ」という名前のノードを解析できないことに気付くまで、すべてが正常に機能しています。簡単に言うと (そして 2 時間後) 問題が TAG NAME にあることに気付きました。明らかに、「画像」は予約語かそのようなものですか?

これがデモンストレーションです。まず、「画像」ノードを持ち、結果を表示しないxmlをシミュレートしました。次に、同じ xml と同じ解析をシミュレートし、「image」の名前を「image1」に変更したところ、動作しました。ここの例を参照してください: http://jsbin.com/evinah/1/edit

したがって、明らかに、Web サービスを変更することはできません。それは私のドメインにはありません。jQueryを使用して「画像」値を取得するにはどうすればよいですか?

ご回答ありがとうございます。

4

3 に答える 3

3

image問題を解決する方法は他の回答で既に言及されていますが、タグで何が「間違っている」かを説明することが重要だと思いました。

XML 文字列を jQuery に渡すと、ブラウザーのネイティブ DOM メソッドを使用して XML が解析されます。ただし、これらの DOM メソッドは主に HTML の解析と処理用です。

要素を作成するとどうなるか見てみましょうroot:

> var e = document.createElement('root');
  <root></root>

console.log(e)に多数のプロパティがリストされていますが、最も重要なことは、この要素が から継承されHTMLUnknownElementていることです。これは理にかなっています。

image次に要素を作成します。

> var e = document.createElement('image');
  <img>

え?はどこ<image></image>ですか?imageのエイリアスでimgあることが判明しました。新しい要素は から継承しHTMLImageElementます。

を実行できると思うかもしれませんが.children('img').text()img要素は子孫を持つことができないため、これは機能しません。ブラウザが生成する結果の構造は次のとおりです。

<root>
    <item>
        <img>
        image link
    </item>
    <item>
        <img>
        image link2
    </item>
</root>

テキスト ノードはimg要素の兄弟であり、子孫ではありません。

于 2013-02-10T14:21:39.910 に答える
2

この$関数は、XML の解析に使用するためのものではありません。を使用して$.parseXML、これを jQuery オブジェクトにラップする必要があります: $($.parseXML(...))。実際、HTML には専用の関数もあります$.parseHTML。文字列で呼び出される$関数は、セレクターまたは単純な"<tag>"文字列のいずれかで使用する必要があります。

于 2013-02-10T13:56:48.703 に答える
2

文字列を処理している場合は使用$.parseXMLする必要があります。これにより、jQuery で使用できる有効な有効な XML ドキュメントが返されます。

$($.parseXML(xml)).find('item').each(function(i, e){
  alert($(e).children('image').text());
});

(こちらをご覧ください。)

AJAX を使用している場合は、dataTypeオプションを に設定する必要がありますxml


以外を$(xml)使わなくても部分的に動作する主な理由は、DOM 構築中に要素が要素に音訳されるためです。その上には空の要素があり、XML 構造を台無しにする子テキスト要素は含まれません。$.parseXML<image><image><img><img>

<img>および過去の使用方法の詳細については、HTML のvs<image>タグを参照してください。<img><image>

于 2013-02-10T13:57:42.523 に答える