2011-12-14 6 views
0

このXMLスニペットを考えてみましょう:XMLリストに個別の値を見つけるために、E4Xを使用し

<book id="5" /> 
<book id="15" /> 
<book id="5" /> 
<book id="25" /> 
<book id="35" /> 
<book id="5" /> 

私はid属性に一意の値のリストを取得するにはE4X声明/クエリを構成できますか? JavaScript以外のブラウザのコンテキストでE4Xを使用しています。

5 
15 
25 
35 

役立つあらゆる種類のdistinct()またはgroupby()方法はありますか?そうでない場合、どのようにこれを達成することができますか?

答えて

2

ユニークまたはグループバイの方法はありません。ただし、E4Xを使用すると、一意でない値のXMLListをすばやく作成できます。

var xmlSnippet = <stuff><book id="5"/> 
         <book id="15"/> 
         <book id="5"/> 
         <book id="25"/> 
         <book id="35"/> 
         <book id="5"/> 
        </stuff>; 
var attributes = xmlSnippet['book'].attribute("id"); 

XMLListをユニークにするには、XMLListを繰り返し処理し、各要素をキー値としてオブジェクトに格納します。これらの値にアクセスする

var uniqueAttributes = new Object(); 

for each (var a in attributes) 
{ 
    uniqueAttributes[a] = null; 
} 

、ループ内で使用してそれらを反復処理(しない各中の場合)

for (var u in uniqueAttributes) 
{ 
// do something with u 
} 
1

これは、問題の属性値にパイプ "|"、文字が含まれていないことを前提としています。その場合は、一番下のパイプ文字を値にない他のものに変更します。変数はJIT実行のために静的に型指定されています。これがあなたの必要とすることを願っています。

var idvalues = function (x) { //x = node name 
    var a = document.getElementsByTagName(x), 
     b, 
     c = [], 
     d, 
     e; 
    for (b = a.length - 1; b > -1; b -= 1) { // gather all the id values into an array 
     c.push(a[b].getAttribute("id")); 
    } 
    for (b = c.length - 1; b > -1; b -= 1) { 
     if (c[b] !== "") { 
      for (d = b - 1; d > -1; d -=1) { 
       if (c[b] === c[d]) { 
        c[d] = ""; 
       } 
      } 
     } 
    } 
    e = c.join("|"); 
    c = e.split("|"); 
    return c; 
}; 
関連する問題