YUI().use("datatype-xml", "dataschema-xml", function(Y)
{
var dataIn = Y.DataType.XML.parse(xmlData);
schema = {
resultListLocator: "song",
resultFields: [{key:"title"}, {key:"artist"}, {key:"rank"}]
},
dataOut = Y.DataSchema.XML.apply(schema, dataIn);
console.log(dataOut); <-- Display list of object
console.log(dataOut.length); <--- Undefined
});
Everything seems correct when I log only dataOut (a list of object). But when I try to loop through that list, the length is undefined.
So how can I iterate through a list after applying DataSchema.XML ?
DataSchema's apply
method returns an object with results
and meta
properties. The results
property is an array that you can iterate over. Here's an example:
YUI().use("datatype-xml", "dataschema-xml", function(Y) {
var data_in = Y.DataType.XML.parse('<Response><Session>542235629</Session><Tracks start="1" count="10" total="98" errorCount="0" defaultSort="popularity+" description="Top 100 Tracks" name="Top 100 Tracks" ><Track id="59672468" rating="-1" title="I Kissed A Girl"><Artist id="30326214" rating="-1">Katy Perry</Artist><ItemInfo><ChartPosition last="26" this="1"/></ItemInfo></Track><Track id="47973564" rating="-1" title="Shake It"><Artist id="45575683" rating="-1">Metro Station</Artist><ItemInfo><ChartPosition last="27" this="2"/></ItemInfo></Track><Track id="52207363" rating="-1" title="Bleeding Love"><Artist id="37956508" rating="-1">Leona Lewis</Artist><ItemInfo><ChartPosition last="28" this="3"/></ItemInfo></Track></Tracks></Response>'),
schema = {
metaFields: {
session: "//Session", total:"//Tracks/@total"
},
resultListLocator: "//Track",
resultFields: [
{key:"song", locator:"@title"},
{key:"artist", locator:"Artist"},
{key:"rank", locator:"ItemInfo/ChartPosition/@this"}
]
},
data_out = Y.DataSchema.XML.apply(schema, data_in);
Y.Array.each(data_out.results, function (data) {
// ...
})
});