2011-01-11 3 views
2

Я обращаюсь к службе поиска Microsoft Office SharePoint Server, чтобы написать некоторые результаты в веб-части. У меня корректный запрос, но у меня возникли проблемы с анализом ответа xml через JQuery.синтаксический анализ 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

Пожалуйста, пост JavaScript, который вы используете для разбора XML. – ScottE

+0

Вам нужно будет разместить javascript, который обрабатывает ответ. – harpo

ответ

2

данных XML может быть 'разобраны' с использованием методов JQuery точно так же как HTML. Предполагая, что 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

Если у вас есть это что-то вроде

.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 
    } 
); 
Смежные вопросы