我如何使用jQuery来解析XML

时间:2011-01-12 01:52:03

标签: jquery xml

这个(或它的一些变体)由我的PHP脚本输出请注意,某些标签在不同的上下文中使用相同的名称:

<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。谢谢你的帮助!

编辑:如果我说$(“status”,xml).text()我怎么知道哪个&lt;状态&gt;标签被引用?我需要区分&lt;对话&gt;和&lt;消息&gt;。

1 个答案:

答案 0 :(得分: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()返回了累积的文字内容。