2012-05-08 9 views
1

JavaScriptを使用して大きなXMLファイルを解析しようとしています。オンラインで見ると、ブラウザのDOMパーサを使用するのが最も簡単な方法です。これは機能し、IDで要素を取得できます。私はまた、それらの要素の "クラス"属性を取得することができ、それは私が期待するものを返します。しかし、クラスごとに要素を取得することはできないようです。JavaScriptでXMLを解析し、クラス名で要素を取得しようとしています

以下は、最新のChromeで試みた:

xmlString = '<?xml version="1.0"?>'; 
xmlString = xmlString + '<example class="test" id="example">content</example>' 

parser = new DOMParser(); 
xmlDoc = parser.parseFromString(xmlString,"text/xml"); 

xmlDoc.getElementById("example");  
     // returns the example element (good) 

xmlDoc.getElementById("example").getAttribute("class"); 
     // returns "test" (good) 

xmlDoc.getElementsByClassName("test"); 
     // returns [] (bad) 

任意のアイデア?

+0

どのブラウザですか?ブラウザがこの機能をサポートしていない可能性がありますか? – gdoron

+1

duplicate to http://stackoverflow.com/questions/9396354 – Bergi

+1

これはうまくいかないでしょう。あなたはXML文書を扱っており、HTML固有のプロパティ( 'class'など)は適用されません。しかし、タグ名(つまり、 'xmlDoc.getElementsByTagName( 'example');')で要素を取得することはできますか? –

答えて

0

JQueryを使用して、クラスセレクタを使用してXMLファイルを解析できます。 http://jquery.com

+0

これは、jQueryが利用できる場合は、これが最善の方法だと思われます。ありがとう。 –

1

これは、タグ名が一貫していると仮定して、特定のクラスのすべての要素を取得する必要があります。

var elements = xmlDoc.getElementsByTagName('Example'); 
var classArray = []; 
for(var i=0;i<elements.length;i++){ 
    if(elements[i].className=="test"){ 
     classArray.push(elements[i]) 
}} 
+0

これはほとんど動作しますが、.classNameは少なくともChromeでは存在しないため、getAttribute( 'class')を使用する必要があります。私はそれがjQueryパーサよりも速いかどうかはわかりませんが –

0

XMLとは対照的に、パーサータイプをHTMLに更新する必要があります。

parser = new DOMParser(); 
xmlDoc = parser.parseFromString(xmlString,"text/html") 
関連する問題