1

次のような XML があります。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <Row>
        <ColumnA>2013-08-07</ColumnA>
        <ColumnB>Pizza</ColumnB>
    </Row>
    <Row>
        <ColumnA>2013-04-07</ColumnA>
        <ColumnB>Burger</ColumnB>
    </Row>
    <Row>
        <ColumnA>2013-04-07</ColumnA>
        <ColumnB>Pizza</ColumnB>
    </Row>

XML は、数百行にわたってこのように続きます。私が達成しようとしているのはこれです。「出力: ピザ: 2013 年 8 月 7 日と 2013 年 4 月 7 日に 2 回発生。」これまでのところ、これは私が試したことです:

//Variables
var myXML:XML;
var xmlLoader:URLLoader = new URLLoader();

//Check that the XML is loaded
xmlLoader.load(new URLRequest ("myXML.xml"));
xmlLoader.addEventListener(Event.COMPLETE, processXML);
function processXML(e:Event):void {
    myXML = new XML(e.target.data);

    //Create a XMLList for Column A data

    var items:XMLList = myXML.Row.ColumnA.text()

    //Create a XMLList for Rows

    var rows:XMLList = myXML.Row

    //Create a XMLList for Column B data (Dates)
    var dates:XMLList = myXML.Row.ColumnB.text()

    //Create an empty object to fill in the occurances of Column A
    var columnA:String;
    var map:Object = {};
    for each (columnA in items)
    {
        if(!map[columnA])
            map[columnA] = 1;
        else 
            map[columnA]++;
    }


    for ( columnA in map ) 
    {
        trace(columnA, "=", map[columnA], "times. On dates ");
    }

}

私の初心者は、列Bを列Aに関連付けることができるかどうかを確認しようとしています

    var columnB:String;

    for ( var i:uint=0; i<rows.length(); i++ )
    {
        if ( columnA[i] == myXML.Row.ColumnA[i] )
        {
            trace( columnA[i], "=", columnB[i] )
        }
    }

それは私を困惑させます。現在、出力パネルに表示されます...

Pizza 2 times. On Dates 
Burger 1 times. On Dates
etc.

トレース出力に日付を含める方法はありますか? だから私は次のようなものを得る:

Pizza 2 times. On Dates 2013-08-07, 2013-04-07
4

1 に答える 1

4

XML を解析する前に、XML から何も抽出しません。

var map:Object = {};
var meal:String;    
//loop through each row
for each (var node:XML in myXML.Row)
{
  meal = node.ColumnB.text();

  //if the meal does not exist as a key in our map yet, create it and put an empty array in it
  if (!map[meal])
    map[meal] = [];

  //fill the array of dates with the current date
  map[meal].push(node.ColumnA.text());
}

そこで、次のように満たされたオブジェクトを取得します。

{Pizza: ["2013-08-07", "2013-04-07"], Burger: ["2013-04-07"]}

あなたはただそれを通過する必要があります:

for (var meal:String in map)
{
  trace(meal, "found", map[meal].length, "times on", map[meal]);
}
于 2013-05-21T09:58:55.710 に答える