2011-01-11 17 views
2

一部の結果をWebパーツに書き込むために、Microsoft Office SharePoint Server Search Serviceにクエリを実行しています。私は正しくクエリが動作しているが、JQuery経由でXMLレスポンスを解析する際に問題が発生しています。xmlをjqueryで解析する

以下

は、XML応答である:

<document> 
<properties> 
<Property> 
    <Name>p1</Name> 
    <Type>String</Type> 
    <Value>blue</Value> 
    </Property> 
<Property> 
    <Name>title</Name> 
    <Type>string</Type> 
    <Value>titreA</Value> 
    </Property> 
    </properties> 
</document> 
<document> 
<properties> 
<Property> 
    <Name>p1</Name> 
    <Type>String</Type> 
    <Value>blue</Value> 
    </Property> 
    <Property> 
    <Name>title</Name> 
    <Type>string</Type> 
    <Value>titreB</Value> 
    </Property> 
    </properties> 
</document> 
<document> 
<properties> 
<Property> 
    <Name>p1</Name> 
    <Type>String</Type> 
    <Value>green</Value> 
    </Property> 
<Property> 
    <Name>title</Name> 
    <Type>string</Type> 
    <Value>titreC</Value> 
    </Property> 
    </properties> 
</document> 
<document> 
<properties> 
<Property> 
    <Name>p1</Name> 
    <Type>String</Type> 
    <Value>red</Value> 
    </Property> 
<Property> 
    <Name>title</Name> 
    <Type>string</Type> 
    <Value>titreD</Value> 
    </Property> 
    </properties> 
</document> 

どのように私は、P1の値、およびその値の出現数を取得することができますか?ブルー(2)、(1)緑、赤(1)

+0

xmlの解析に使用しているjavascriptを投稿してください。 – ScottE

+0

あなたは応答を扱うjavascriptを投稿する必要があります。 – harpo

答えて

2

のようなものでこれを持っていると仮定すると:このように 。たとえば、dataがXMLデータであるとします。

var name = 'p1'; 
$data = $(data); 
$p1 = $data.find('Name:contains("'+name+'")').parent('Property'); 
p1Value = $p1.map(function(i,v){ 
    return $(v).children('Value').text(); 
}).get(); 
alert(p1Value); 

p1Valueは、名前が 'p1'である値の配列です。

p1Value[0]は「青」に等しい。

発生回数も必要な場合は、これを行うことができます。

var name = 'p1'; 
$data = $(data); 
$p1 = $data.find('Name:contains("'+name+'")').parent('Property'); 
p1Values = {}; 
$p1.each(function(i,v){ 
    var val = $(v).children('Value').text(); 
    if(p1Values.hasOwnProperty(val)){ 
    p1Values[val]++; 
    } 
    else{ 
    p1Values[val] = 1; 
    } 
}); 

p1Valuesは、値をプロパティ名として、オカレンスをプロパティ値として持つオブジェクトです。

p1Value['blue']は2と同じです。

+0

は私が望むように動作するようです:)本当に理解しやすい。あなたがそれを理解すると、Jqueryは本当に強力です。 – LoKtO

0

あなたがXMLデータはちょうどHTMLのようなjQueryのメソッドを使用して '解析された' ことができ

.ajax(
    // calling code here 
    success: function(data, status, xhr) { 
    var jqData = $(data); 
    var countMap = {}; 
    jqData.find("Value").each(function() { 
     // filter for only P1 
     var jqThis = $(this); 
     if(jqThis.parent().find("Name").text == "p1") { 
      if(countMap[jqThis.text]) { 
       countMap[jqThix.text]++; 
      } else { 
       countMap[jqThis.text] = 1; 
      } 
     } 
    }); 
    // From here countMap should contain the value in Value for each p1 as a key 
    // and a count of occurrences as a value 
    } 
);