2009-10-27 8 views
0

J'ai deux fichiers xml, défaut. xml et employee.xml. Mais les fichiers ont un champ commun mais avec des noms différents dans chaque fichier. Je veux que les deux fichiers soient fusionnés dans une seule collection de tableaux.Comment obtenir deux fichiers xml dans une seule collection de tableaux en flex?

La structure de mon fichier est 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> 

Et mon employee.xml

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

<Employees> 

Je reçois les deux fichiers XML dans deux collections de tableau:

<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}"/> 

lorsque "assignedTo" correspond à "employeeName", je souhaite que "employeeId" soit ajouté à la collection de tableaux defectList. Comment puis-je faire ceci? Comment naviguer dans une collection de tableaux?

Et comment vérifier si le champ assigné à dans defectList est égal au champ employeeName dans employeeList? Quelqu'un me guide ..

EDIT

ok, maintenant je suis en mesure de comparer les deux champs, AssignedTo de defectList et employeeName de employeeList.Thanks à Simon:

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

Mais comment ajouter le champ employeeId à cet élément de tableau particulier, afin que je puisse aussi utiliser defectList comme dataprovider pour l'ID de l'employé de dataagrid n display? Quelqu'un peut il m'aider avec ça.

SOLUTION

J'ai trouvé la solution. Voici le code:

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

Maintenant, si je donne comme datafield « employeeId » dans le DataGrid avec defectList comme dataprovider, je reçois l'id employé du Nom de l'employé correspondant.

Répondre

1

Je peux répondre à une partie de cette ...

Itère ArrayCollection est facile ...

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

Vous devez être prudent avec itérateurs comme ForEach si vous accrochez le contenu du tableaux que vous itérez. Vous pouvez envisager de charger un troisième tableau au fur et à mesure.

Je ne sais pas exactement comment vous obtenez les valeurs des éléments des objets XML créés dans l'extrait de code, mais il y a beaucoup d'aide sur le Adobe Livedocs

Vous pourriez être en mesure d'utiliser le fait que un objet peut avoir ses champs de référence de manière tardive ...

var elementContents:String = employee["employeeName"]; 
+0

ok, je suis capable de comparer les éléments. c'est pour ça. Mais comment ajouter le champ "EmployeeId" à la collection de tableaux defectList? Une idée? – Angeline

+0

Merci beaucoup pour votre aide. J'ai trouvé la solution :-) – Angeline

Questions connexes