如何返回一个xml节点并从其子节点获取.text()?

时间:2012-10-26 14:47:08

标签: jquery xml

我对Jquery很新。我正在尝试进行从多个页面检索信息的插件。 我做一个ajax调用并得到一个xml,然后我想选择一个节点的特定文本,xmlc看起来像这样:

<status>
  <item>
    <name>NameA</name>
    <serviceUrl>theURL</serviceUrl>
    <timeout>184</timeout>
    <errorMessage></errorMessage>
    <statusMessage>SpecificMessage</statusMessage>
  </item>
  <item>
    <name>NameB</name>
    <serviceUrl>theURL</serviceUrl>
    <timeout>200</timeout>
    <errorMessage></errorMessage>
    <statusMessage>SpecificMessageB</statusMessage>
  </item>
  <item>
    <name>NameC</name>
    <serviceUrl>theURL</serviceUrl>
    <timeout>300</timeout>
    <errorMessage></errorMessage>
    <statusMessage>SpecificMessageC</statusMessage>
  </item>
</status>

我无法开展工作的代码是:

    function parseXml(xml)
{
    item = getItemFor(xml, "NameB");
    console.log("name: " + item.find("name").text());
    console.log("serviceUrl: " + item.find("serviceUrl").text());
    console.log("timeout: " + item.find("timeout").text());
}

var getItemFor= function(xml, name){
    $(xml).find("item").each(function(){
        var itName = $(this).find("name").text();
        if (itName === name){
            console.log("Found: " + name);
            return $(this);
        }


    });
}

底线,我无法从getItemFor函数中获取名称为nameB的xml项目NODE,而且我也无法停止.each()循环。

1 个答案:

答案 0 :(得分:1)

一种解决方法是修改getItemFor函数以传递从内循环返回的结果:

var getItemFor = function(xml, name) {
    var result = null;
    $(xml).find("item").each(function() {
        var itName = $(this).find("name").text();
        if (itName === name) {
            console.log("Found: " + name);
            result = $(this);
        }
    });
    return result;
}

或完全简化parseXml(缩减为一个选择器):

function parseXml(xml) {

    var item = $('item name:contains("NameB")', xml).parent();

    console.log("name: " + item.find("name").text());
    console.log("serviceUrl: " + item.find("serviceUrl").text());
    console.log("timeout: " + item.find("timeout").text());
}

请参阅此FIDDLE