2016-11-11 2 views
3

Ich führe einen API-Aufruf zu einem Controller, der XML zurückgibt. Die Ausgabe lautet:XML API Kinder Rückgabe Funktion?

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

Dieser aus dem folgenden C# Controller-Code generiert wird:

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

In meinem jQuery, ich bin versucht, die Bezeichnung/Wert-Paare zu erhalten und sie in eine Array einfügen.

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

Als ich zur Ausgabe der Werte von var Label versuchen, ich folgendes auf meiner Benachrichtigung erhalten:

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

Was mache ich falsch? Ich erwarte, dass ich mit dem Land alarmiert werde.

Antwort

2

Das Problem ist, weil das ArrayOfreport_overallTime Element die Wurzel des XML-String ist, so müssen Sie filter() verwenden, das abzurufen, dann find() die report_overallTime zu bekommen. Sie können auch map() verwenden, um Ihr Array zu erstellen. Versuchen Sie folgendes:

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 Daten nicht mehr gibt eine Funktion, aber jetzt gibt ein leeres Array [] – KMBonin

+0

Ihre ursprüngliche Version zurück Funktionen wie früher 'Text', nicht' text() '. Wie Sie jedoch von der Geige sehen können, funktioniert dies angesichts der von Ihnen bereitgestellten XML. Können Sie eine Probe des nicht funktionierenden Codes in einer Geige zeigen, damit ich sehen kann, wie die Logik strukturiert ist? –

+0

Das war es! Ich habe gerade den Text in text() geändert und voila! Es funktionierte! Danke für den Tipp. – KMBonin