2011-01-12 2 views
2

Это (или некоторое изменение этого) выводится мой PHP скрипт Обратите внимание, что некоторые теги использовать то же имя в различных контекстах:Как использовать JQuery для синтаксического анализа XML, как я здесь

<conversations> 
    <status>1</status> 
    <conversation> 
    <open>0</open> 
    <status>1</status> 
    <priority>1</priority> 
    </conversation> 
    <conversation> 
    <open>1</open> 
    <status>0</status> 
    <priority>0</priority> 
    </conversation> 
</conversations> 

<messages> 
    <status>1</status> 
    <message> 
    <msgID>165</msgID> 
    <userID>16></userID> 
    <msg>How do I parse this?</msg> 
    </message> 
</messages> 

Во-первых, Мне нужно прокрутить и отобразить кнопку для каждой беседы. Затем мне нужно прокрутить и отобразить все новые сообщения для выбранного сеанса. Я могу понять логику самостоятельно. Я просто не знаю, как анализировать (перебирать) XML. Спасибо за вашу помощь!

EDIT: Если я скажу $ ("status", xml) .text(), как я могу узнать, к какому < status тег ссылается? Мне нужно различать < разговоров> и < сообщений>.

ответ

5
  • .filter() для фильтрации через узлы на верхнем уровне,
  • .children() с дополнительным переключателем, чтобы получить набор непосредственных детей тех, на верхнем уровне
  • .find() с селектором, чтобы получить набор узлов на любом уровне ниже тех, на текущем верхнем уровне
  • .each() перебирать тех, на текущем верхнем уровне

Пример:http://jsfiddle.net/MTPdw/1/

var $xml = $(xml); 

var conversations = $xml.filter('conversations'); 

conversations.children('conversation').each(function() { 
    alert($(this).find('status').text()); 
}); 

Когда вы делаете:

$("status",xml).text() 

... он преобразуется в это:

$(xml).find("status").text(); 

Поскольку узлы на верхнем уровне <conversations> и <messages>, он ищет для всех <status> элементов, которые являются потомками любого из них. Затем .text() вернул кумулятивный текстовый контент.

+0

Спасибо! Должен ли быть символ $ перед «xml»? Я думал, что PHP использует $ для определения переменных, а jQuery - нет. –

+0

@Michael: Нет. Это обычное соглашение, используемое разработчиками jQuery для обозначения переменной, ссылающейся на объект jQuery. Я поместил его там по привычке. Полностью необязательный. У Javascript нет такого требования. – user113716

+0

Итак, когда я писал $ («статус», xml) .text(), это не имело смысла? Или он просто возьмет первый? –

Смежные вопросы