Как получить два XML-файла в одной коллекции массивов во Flex? - PullRequest
0 голосов
/ 27 октября 2009

У меня есть два XML-файла, дефект. xml и employee.xml. Но файлы имеют общее поле, но с разными именами в каждом файле. Я хочу, чтобы оба файла были объединены в одну коллекцию массивов.

Структура моего файла дефекта.xml:

<defectList>
    <defect>
           <revId>123</revId> 
           <revType>IQA</revType> 
           <status>Review Pending</status> 
           <assignedTo>Angeline</assignedTo> 
           <loggedBy>chandran</loggedBy> 
           <closedDate>13-10-2009</closedDate> 
   </defect>
   <defect>
           <revId>124</revId> 
           <revType>IQA</revType> 
           <status>Review Pending</status> 
           <assignedTo>Aarthi</assignedTo> 
           <loggedBy>chandran</loggedBy> 
           <closedDate>15-10-2009</closedDate> 
   </defect>

<defectList>

И мой employee.xml

 <Employees>
      <employee>
               <employeeId>256148</employeeId> 
               <employeeName>Angeline</employeeName> 
      </employee>
      <employee>
               <employeeId>256158</employeeId> 
               <employeeName>Aarthi</employeeName> 
      </employee>

<Employees>

Я получаю оба XML-файла в двух коллекциях массивов:

 <mx:Model id="employeeXML" source="assets/employee.xml"/>
 <mx:ArrayCollection id="employeeList" source="{employeeXML.employee}"/>

 <mx:Model id="defectXML" source="assets/defect.xml"/>
 <mx:ArrayCollection id="defectList" source="{defectXML.defect}"/>   

когда "assignTo" совпадает с "employeeName", я хочу, чтобы "employeeId" был добавлен в коллекцию arrayListList. Как я могу это сделать? Как перебрать коллекцию массивов?

А как проверить, равно ли поле назначенное поле в дефекте в поле employeeName в employeeList? Кто-то ведет меня ..

EDIT

Хорошо, теперь я могу сравнить два поля, назначенных для дефектного списка и сотрудника Имя сотрудника. Спасибо Саймону:

 var defect:Object; 
 var employee:Object; 
for each (defect in defectList) 
{ 
    for each (employee in employeeList) 
    { 
        if(defect.assignedTo == employee.employeeName)
        {
             // defectList.addItem(employee.employeeId);
               // I tried this,but it is wrong .
        }
   } 
} 

Но как добавить поле employeeId к этому конкретному элементу массива, чтобы я мог использоватьfectList в качестве поставщика данных для идентификатора сотрудника отображения сетки данных? Может кто-то помочь мне с этим.

РЕШЕНИЕ

Я нашел решение. Вот код:

public function init():void{
            var defect:Object; 
            var employee:Object; 

                for each (defect in defectList) 
                { 
                    for each (employee in employeeList) 
                    { 
                        if(defect.assignedTo == employee.employeeName)
                        {
                            var id:Object;
                            id=employee.employeeId;
                            defect["employeeId"]=id;    
                        }  
                    } 
                }
        }

Теперь, если я задаю поле данных как "employeeId" в сетке данных с дефектом ListL в качестве поставщика данных, я получаю идентификатор сотрудника соответствующего Имени сотрудника.

1 Ответ

1 голос
/ 27 октября 2009

Я могу ответить на часть этого ...

Перебирать ArrayCollection легко ...

var defect:Object;
var employee:Object;
for each (defect in defectList)
{
    for each (employee in employeeList)
    {
        // do your check here.
    }
}

Вы должны быть осторожны с итераторами, такими как ForEach, если вы вешаете содержимое массивов во время итерации. Вы можете рассмотреть возможность загрузки третьего массива на ходу.

Я не уверен точно, как вы получаете значения элементов из объектов XML, созданных в вашем фрагменте кода, но есть большая помощь по Adobe Livedocs

Возможно, вам удастся использовать тот факт, что объект может иметь ссылку на свои поля поздним образом ...

var elementContents:String = employee["employeeName"];
...