フレックスで単一の配列コレクションに2つのXMLファイルを取得するにはどうすればよいですか?
-
06-07-2019 - |
質問
XML ファイルが 2 つありますが、欠陥があります。xml と従業員.xml。ただし、ファイルには共通のフィールドがありますが、ファイルごとに名前が異なります。両方のファイルを単一の配列コレクションにマージしたいと考えています。
私の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>
そして私の従業員.xml
<Employees>
<employee>
<employeeId>256148</employeeId>
<employeeName>Angeline</employeeName>
</employee>
<employee>
<employeeId>256158</employeeId>
<employeeName>Aarthi</employeeName>
</employee>
<Employees>
2 つの配列コレクション内の両方の 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}"/>
「assignedTo」が「employeeName」と一致する場合、「employeeId」を欠陥リスト配列コレクションに追加したいと考えています。これどうやってするの?配列コレクションを反復処理するにはどうすればよいですか?
そして、defectList の assignTo フィールドがemployeeList のemployeeName フィールドと等しいかどうかを確認するにはどうすればよいでしょうか?誰かが私を導いてくれる…
編集
OK、これで、defectList の assignedTo とemployeeList のemployeeName という 2 つのフィールドを比較できるようになりました。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 .
}
}
}
しかし、その特定の配列要素にemployeeIdフィールドを追加して、defectListをデータグリッドのデータプロバイダーとして使用し、従業員IDも表示できるようにするにはどうすればよいでしょうか?誰かこれを手伝ってくれませんか。
解決
解決策が分かりました。コードは次のとおりです。
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」として指定すると、対応する従業員名の従業員 ID を取得します。
解決
部分的には答えられるんですが…
ArrayCollection を反復処理するのは簡単です...
var defect:Object;
var employee:Object;
for each (defect in defectList)
{
for each (employee in employeeList)
{
// do your check here.
}
}
反復中に配列の内容をハングさせる場合は、ForEach などの反復子に注意する必要があります。途中で 3 番目の配列をロードすることを検討することもできます。
コード スニペットで作成された XML オブジェクトから要素値をどのように取得するのか正確にはわかりませんが、 アドビライブドキュメント
オブジェクトが遅延バインドされた方法でフィールド参照を持つことができるという事実を利用できるかもしれません...
var elementContents:String = employee["employeeName"];