【问题标题】:XML API Children Return Function?XML API子返回函数?
【发布时间】:2016-11-11 16:01:42
【问题描述】:

我正在对返回 XML 的控制器执行 API 调用。输出是:

<ArrayOfreport_overallTime>
    <report_overallTime>
        <label>United States</label>
        <value>65</value>
    </report_overallTime>
    <report_overallTime>
        <label>United Kingdom</label>
        <value>58</value>
    </report_overallTime>
    <report_overallTime>
        <label>Germany</label>
        <value>30</value>
    </report_overallTime>
    <report_overallTime>
        <label>India</label>
        <value>65</value>
    </report_overallTime>
    <report_overallTime>
        <label>Russia</label>
        <value>65</value>
    </report_overallTime>
    <report_overallTime>
        <label>Germany</label>
        <value>30</value>
    </report_overallTime>
</ArrayOfreport_overallTime>

这是从以下 C# 控制器代码生成的:

public class report_overallTimeController : ApiController
{
    public void report_overallTime(HttpContext context)
    {
        var request = HttpContext.Current.Request;
        var settings = Properties.Settings.Default;
        GetAllItems();
    }

    report_overallTime[] items = new report_overallTime[]
    {
        new report_overallTime { label = "United States", value = "65" },
        new report_overallTime { label = "United Kingdom", value = "58" },
        new report_overallTime { label = "Germany", value = "30" },
        new report_overallTime { label = "India", value = "65" },
        new report_overallTime { label = "Russia", value = "65" },
        new report_overallTime { label = "Germany", value = "30" }
    };

    public IEnumerable<report_overallTime> GetAllItems()
    {
        return items;
    }       
}

在我的 jQuery 中,我试图获取标签/值对并将它们插入到数组中。

function initChart(xml) {
    var data = [];
    //alert((new XMLSerializer()).serializeToString(xml));
    $(xml).find('ArrayOfreport_overallTime report_overallTime').each(function (index) {
        var label = $(this).children("label").text;
        var value = $(this).children("value").text;
        data.push([label, parseFloat(value)]);
    });
    //Do something with data...
}

当我尝试输出 var label 的值时,我收到以下警报:

function(a) {
    return Y(this, function(a) {
        return void 0 === a ? n.text(this) : this.empty().append((this[0] && this[0].ownerDocument || d).createTextNode(a))
    }, null, a, arguments.length)
}

我做错了什么?我期待收到这个国家的警告。

【问题讨论】:

    标签: c# jquery xml


    【解决方案1】:

    问题是因为ArrayOfreport_overallTime 元素是XML 字符串的根,所以您需要使用filter() 来检索它,然后使用find() 来获取report_overallTime。您还可以使用map() 来构建您的阵列。试试这个:

    var xml = '<ArrayOfreport_overallTime><report_overallTime><label>United States</label><value>65</value></report_overallTime><report_overallTime><label>United Kingdom</label><value>58</value></report_overallTime><report_overallTime><label>Germany</label><value>30</value></report_overallTime><report_overallTime><label>India</label><value>65</value></report_overallTime><report_overallTime><label>Russia</label><value>65</value></report_overallTime><report_overallTime><label>Germany</label><value>30</value></report_overallTime></ArrayOfreport_overallTime>';
    
    var data = $(xml).filter('ArrayOfreport_overallTime').find('report_overallTime').map(function() {
        var $el = $(this);
        return [[$el.children("label").text(), parseFloat($el.children("value").text())]];
    }).get();
    
    console.log(data);
    &lt;script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"&gt;&lt;/script&gt;

    【讨论】:

    • var data 不再返回函数,而是返回一个空数组:[]
    • 原始版本返回的函数与您使用的 text 相同,而不是 text()。但是,正如您从小提琴中看到的那样,这在您提供的 XML 中有效。您能否在小提琴中显示一个非工作代码示例,以便我了解逻辑的结构。
    • 就是这样!我只是将文本更改为 text() ,瞧!有效!感谢您的提示。
    猜你喜欢
    • 2020-05-29
    • 2015-08-25
    • 1970-01-01
    • 1970-01-01
    • 2011-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多