2016-11-11 6 views
3

XMLを返すコントローラへのAPI呼び出しを実行しています。出力は次のとおりです。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#のコントローラコードから生成されています。私のjQueryので

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; 
    }  
} 

は、私がラベル/値ペアを取得し、配列にそれらを挿入しようとしています。私は出力にVARラベルの値をしようとすると

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... 
} 

、私は私の警告で次を得る:私は間違って

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) 
} 

何をしているのですか?私はその国に警告することを期待しています。 ArrayOfreport_overallTime要素は、XML文字列のルートであるため、

答えて

2

問題があるので、あなたは、report_overallTimeを取得するためにfind()そして、それを取得するためにfilter()を使用する必要があります。 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);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

のvarデータは、もはや機能を返しますが、今は空の配列を返します。あなたが 'text'を使用して、[] – KMBonin

+0

あなたのオリジナルバージョンは、機能を返さない'テキスト() '。しかし、あなたがフィドルから見ることができるように、これはあなたが提供したXMLを与えられています。動作していないコードのサンプルをフィドルに表示して、ロジックがどのように構造化されているかを確認できますか? –

+0

それはそれでした!テキストをtext()とvoilaに変更しました!出来た!先端に感謝します。 – KMBonin

関連する問題