【问题标题】:Parsing XMLRPC struct with jQuery使用 jQuery 解析 XMLRPC 结构
【发布时间】:2011-09-07 17:17:38
【问题描述】:

我正在尝试使用 jQuery 解析 XMLRPC 响应以创建一个包含结构数组内容的表。响应如下所示:

<?xml version="1.0"?>
<methodResponse><params><param><value><array><data>
    <value><struct><member><name>time</name><value>1315415195</value></member><member><name>level</name><value>DEBUG</value></member><member><name>thread</name><value>0x805e558</value></member><member><name>message</name><value>glib_syslog_get_log_messages</value></member></struct></value>
    <value><struct><member><name>time</name><value>1315415160</value></member><member><name>level</name><value>DEBUG</value></member><member><name>thread</name><value>backup-Backups</value></member><member><name>message</name><value>Sleeping 5 minutes</value></member></struct></value>
    ....
</data></array></value></param></params></methodResponse>

然后我在我的回调函数中解析响应。第一个罚款很好,可以找到响应中的所有结构元素。第二次查找尝试查找名称为 time 的成员的值,但只是再次返回 struct 元素。 “为我查找名为 X 的成员的值元素的文本?”的正确选择器是什么?

function loadStatusDone(data) {
    if(!data) {
        return;
    }

//first, must clean the content viewer
$("table#tableStatus tbody").children().remove();
$(data).find('struct').each(function(){
    var ts = $(this).find("member name:contains(time) :parent value").text();
    var level = "level";
    var thread = "thread";
    var message = "some message";

    var html = "<tr>" +
    "<td>" + ts + "</td>" +
    "<td>" + level + "</td>" +
    "<td>" + thread + "</td>" +
    "<td>" + message + "</td>" +
    "</tr>";


    $("table#tableStatus tbody").append(html);
    $("table").trigger("update");
});
}

【问题讨论】:

    标签: jquery xml xml-rpc


    【解决方案1】:

    你可以分开

    var ts = $(this).find("member name:contains(time) :parent value").text();
    

    进入:

    var $mem = $(this).find('member name:contains(time)').parent(),
        ts = $('value', $m).text();
    

    这将选择带有"time" 作为文本的name 节点,然后获取其父节点(即包含成员节点)。然后使用成员节点作为上下文,获取value 节点并返回它的文本。我在您的 XML 上对此进行了测试,它似乎对我有用。

    我的测试代码

    //dirty version of your XML
    var $xml = '<methodResponse><params><param><value><array><data><value><struct><member><name>time</name><value>1315415195</value></member><member><name>level</name><value>DEBUG</value></member><member><name>thread</name><value>0x805e558</value></member><member><name>message</name><value>glib_syslog_get_log_messages</value></member></struct></value><value><struct><member><name>time</name><value>1315415160</value></member><member><name>level</name><value>DEBUG</value></member><member><name>thread</name><value>backup-Backups</value></member><member><name>message</name><value>Sleeping 5 minutes</value></member></struct></value></data></array></value></params></methodResponse>';
    
    $xml.find('struct').each(function(){
        var $m = $(this).find('member name:contains(time)').parent(),
            ts = $('value', $m).text();
    
        console.log(ts);
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-10-08
      • 1970-01-01
      • 2018-08-02
      • 2019-01-17
      • 1970-01-01
      • 1970-01-01
      • 2013-03-04
      • 2013-10-19
      相关资源
      最近更新 更多