用jquery解析xml

时间:2011-01-11 17:24:45

标签: jquery xml parsing

我正在查询Microsoft Office SharePoint Server搜索服务,以将一些结果写入Web部件。我的查询工作正常但是在通过JQuery解析xml响应时遇到了一些麻烦。

以下是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)

2 个答案:

答案 0 :(得分:2)

可以像使用HTML一样使用jQuery的方法“解析”XML数据。假设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.

答案 1 :(得分:0)

假设您有类似

的内容
.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
  }
 );