парсинг XML с помощью jquery - PullRequest
       0

парсинг XML с помощью jquery

2 голосов
/ 11 января 2011

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

Ответы [ 2 ]

2 голосов
/ 11 января 2011

Данные 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 голосов
/ 11 января 2011

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

.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
  }
 );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...