2012-11-13 4 views
5

いくつかのノードに名前空間があるXMLファイルがあります。基本的にはファイルは次のようになります。私たちが達成したい何名前空間によるXMLノードのjQueryでの検索

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

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

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

$(xml).find("x\\:bla, bla")を使用すると、そのノードがblaと呼ばれていることがわかっている場合に限り動作します。

+0

あなたは[こちら]する可能性のある解決策を見つけることができます(http://stackoverflow.com/questions/2563101/how-to-find-extract-data-from-xml-with-jquery) – VicoMan

+0

感謝ヒントのために、しかしこれは全く名前空間についてではありません(または私は何かが恋しいですか?)。 –

+1

多分これは役に立ちます: [リンク](http://stackoverflow.com/questions/853740/jquery-xml-parsing-with-namespaces) [1]:http://stackoverflow.com/questions/ 853740/jquery-xml-with-namespaces – Oliver

答えて

5

あなたが使用できるjQueryのセレクタを(hereを参照)

xml.find("[nodeName*='x:']") 
+0

ありがとう、完璧に動作します:-) –

+3

いいえ、それはありません。 XMLフラグメントの作成者は、いつでもローカルプレフィックスを変更して実装を破ることがあります...ツールをアップグレードするだけで(何らかの種類のシリアル化を使用する可能性があります)、ブレークする可能性がありますあなたのアプリ... – Ingo

+0

えええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええええ>名前空間とローカルプレフィックスがその名前空間に使用されているので、大丈夫ですか? –

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' 

demo

+0

私はxmlns-namespace定義が不足していて、それを更新しました。 –

1

jQuery XML parsing with namespaces作業を参照してくださいリテラル名前空間接頭辞を検索する方法を示しています。私は実際のXML処理がないので、これを「邪悪な」回避策と見なします。しかし、jQueryは実際の名前空間の処理をサポートしていないようです。だからおそらくその解決策を求めなければならないでしょう。

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')); 
});