2009-10-27 1 views
0

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

Структура моего файла defect.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» добавлялся в коллекцию массива defectList. Как я могу это сделать? Как пробивать массив массива?

И как проверить, соответствует ли назначенное поле в defectList полю employeeName в employeeList? Некоторые один наставит меня ..

EDIT

нормально, сейчас я могу сравнить два поля, assignedTo из defectList и employeeName из employeeList.Thanks Симону:

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 в этот конкретный элемент массива, чтобы я мог использовать defectList как dataprovider для идентификатора сотрудника DataTrend n display employee? Может кто-то помочь мне с этим.

РЕШЕНИЕ

я обнаружил решение. Вот код:

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

Теперь, если я дам DataField как «EmployeeID» в сетке с defectList как DataProvider, я получаю идентификатор сотрудника соответствующего имени сотрудника.

ответ

1

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

Итерации через 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"]; 
+0

ОК, я могу сравнить элементы. для этого. Но как добавить поле «EmployeeId» в коллекцию массива defectList? Есть идеи? – Angeline

+0

Большое спасибо за вашу помощь. Я нашел решение :-) – Angeline