如何从DataSchema XML迭代数据输出

How to iterate data output from DataSchema XML

本文关键字:迭代 数据 输出 XML DataSchema      更新时间:2023-09-26
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
});

当我只记录dataOut(对象列表)时,一切似乎都是正确的。但是当我尝试遍历这个列表时,长度是未定义的。

那么我如何在应用DataSchema.XML后迭代列表呢?

DataSchema的apply方法返回具有resultsmeta属性的对象。results属性是一个可以迭代的数组。下面是一个例子:

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) {
    // ...
  })
});