5

一部のノードに名前空間が付けられたXMLファイルがあります。基本的に、ファイルは次のようになります。

<foo>
    <bar xmlns:x="http://www.example.com/">
        <x:bla foo="bar" />
    </bar>
</foo>

達成したいのは、x:blaノードを選択したいということですが、残念ながら、ノードの名前は事前にわかりません。名前空間だけです。したがって、私たちが知っているのは、基本的にそれがx:*ノードであるということだけです。

findここで、問題は次のとおりです。を使用してXMLファイルを解析した後、jQueryのメソッドを使用してこのノードを選択するにはどうすればよい$.parseXMLですか?

使用$(xml).find("x\\:bla, bla")は機能しますが、ノードが呼び出されることがわかっている場合に限りますbla

4

4 に答える 4

5

属性を使用できます-jQuery-selectorを含みます(ここを参照)

xml.find("[nodeName*='x:']")
于 2012-11-13T10:36:03.370 に答える
1

.parseXML()XML解析エラーが発生しましたが、構文を処理できないよう<x:bla..です。

そこで、カスタムセレクターでjQueryを使用して、名前空間で要素を検索しました。

$.expr[':'].findNS = function(obj, idx, meta, stack) {
    if (obj.nodeName.indexOf(meta[3].toUpperCase()+':') === 0) {
        return true;
    }
    return false;
};

var xml="<foo><bar><x:bla atr='attvalue' /></bar></foo>";

alert( $(xml).find(':findNS(x)').attr('atr') ); // Alerts 'attvalue'

作業デモを見る

于 2012-11-13T10:21:32.093 に答える
1

名前空間を使用したjQueryXML解析は、リテラル名前空間プレフィックスを検索する方法を示しています。これは実際のXML処理ではないため、これは「邪悪な」回避策と見なします。しかし、jQueryは実際の名前空間処理をサポートしていないようです。したがって、おそらくその解決策を選択する必要があります。

于 2012-11-13T10:28:42.030 に答える
0

同様のニーズがあり、名前空間を適切に処理したいと考えていました。これが私のために働いた例です。この場合、MediaRSSプロパティを含むRSSフィードを読んでいます。

var xmlDoc = $.parseXML(data);
var $xml = $(xmlDoc);
var ns = {};
$xml.find('item').each(function() {
    console.log('title = ' + $(this).find('title').text());
    console.log('link  = ' + $(this).find('link').text());
    console.log('thumb = ' + 
        $(this.getElementsByTagNameNS('http://search.yahoo.com/mrss','thumbnail')).attr('src'));
});
于 2015-04-21T01:26:55.357 に答える