2014-02-18 81 views
0

我正在從服務器獲取XML數據(請參閱xmlData值)。 我需要:無法檢查Adobe Flex中的現有XML節點3

  1. 創建非重複另一個XML文件夾文件
  2. 創建按月最終計數另一個XML。

我無法用下面的代碼做這件事,並得到重複的記錄。

private var xmlData:XML = new XML("<root><SUMMARY_RECORD><FOLDER>Folder1</FOLDER><COUNT>100</COUNT><MONTH>Feb</MONTH><QUARTER>Q1</QUARTER><YEAR>2014</YEAR></SUMMARY_RECORD><SUMMARY_RECORD><FOLDER>Folder1</FOLDER><COUNT>100</COUNT><MONTH>Feb</MONTH><QUARTER>Q1</QUARTER><YEAR>2014</YEAR></SUMMARY_RECORD></root>"); 

    var folderDataXML:XML = new XML("<root></root>"); 
    var folderDGDataXML:XML = new XML("<root></root>"); 

    private function loaded():void{ 
     var item:XML; 
     folderDGDataXML.appendChild(new XML("<FOLDER_NAME><Name>ALL</Name></FOLDER_NAME>")); 
     for each (item in xmlData.SUMMARY_RECORD){ 
      if (folderDGDataXML.FOLDER_NAME.(Name==item.FOLDER).toString() == ""){ 
       folderDGDataXML.appendChild(new XML("<FOLDER_NAME><Name>"+item.FOLDER+"</Name></FOLDER_NAME>")); 
      } 

      if (folderDataXML.SUMMARY_RECORD.(Name==item.MONTH).toXMLString() == ""){ 
       folderDataXML.appendChild(new XML("<SUMMARY_RECORD><Name>"+item.MONTH+"</Name><COUNT>"+item.COUNT+"</COUNT></SUMMARY_RECORD>")); 
      }else{ 
       var count:int = Number(folderDataXML.SUMMARY_RECORD.(Name==item.MONTH).COUNT) + Number(item.COUNT); 
       folderDataXML.SUMMARY_RECORD.(Name==item.MONTH).COUNT = count; 
      } 

     } 
    } 

最終輸出,folderDGDataXML

<root> 
    <FOLDER_NAME> 
    <Name>ALL</Name> 
    </FOLDER_NAME> 
    <FOLDER_NAME> 
    <Name>Folder1</Name> 
    </FOLDER_NAME> 
    <FOLDER_NAME> 
    <Name>Folder1</Name> 
    </FOLDER_NAME> 
</root> 

folderDataXML

<root> 
    <SUMMARY_RECORD> 
    <Name>Feb</Name> 
    <COUNT>100</COUNT> 
    </SUMMARY_RECORD> 
    <SUMMARY_RECORD> 
    <Name>Feb</Name> 
    <COUNT>100</COUNT> 
    </SUMMARY_RECORD> 
</root> 

我在做什麼錯? 獲得正確的XML後,我需要填充數據網格&柱形圖。

回答

0

試試這個

在XML檢查元素存在或不hasOwnProperty或者我們可以使用in運營商無論如何我們的情況下,如果它是基於價值,不妨像這樣folderDGDataXML.descendants("FOLDER_NAME").(Name.text() == "Folder1"); //返回總的XMLList。在長度()的幫助下,我們可以預測有價值的元素是否發生。

希望這會爲你工作。

var xmlData:XML = new XML("<root><SUMMARY_RECORD><FOLDER>Folder1</FOLDER><COUNT>100</COUNT><MONTH>Feb</MONTH><QUARTER>Q1</QUARTER><YEAR>2014</YEAR></SUMMARY_RECORD><SUMMARY_RECORD><FOLDER>Folder1</FOLDER><COUNT>100</COUNT><MONTH>Feb</MONTH><QUARTER>Q1</QUARTER><YEAR>2014</YEAR></SUMMARY_RECORD></root>"); 

var folderDataXML:XML = new XML("<root></root>"); 
var folderDGDataXML:XML = new XML("<root></root>"); 
var item:XML; 

folderDGDataXML.appendChild(new XML("<FOLDER_NAME><Name>ALL</Name></FOLDER_NAME>")); 

for each (item in xmlData.SUMMARY_RECORD) 
{ 
    var folderName:String = item.FOLDER.text(); 
    var monthName:String = item.MONTH.text(); 

    var existXMLList:XMLList = folderDGDataXML.descendants("FOLDER_NAME").(Name.text() == folderName); 

    if (existXMLList.length() == 0) 
    { 
     folderDGDataXML.appendChild(new XML("<FOLDER_NAME><Name>"+item.FOLDER+"</Name></FOLDER_NAME>")); 
    } 

    var monthXMLList:XMLList = folderDataXML.descendants("SUMMARY_RECORD").(Name.text() == monthName); 

    if (monthXMLList.length() == 0) 
    { 
     folderDataXML.appendChild(new XML("<SUMMARY_RECORD><Name>"+item.MONTH+"</Name><COUNT>"+item.COUNT+"</COUNT></SUMMARY_RECORD>")); 
    } 
    else 
    { 
     monthXMLList..COUNT = Number(monthXMLList..COUNT) + Number(item.COUNT); 
     //If more than one node it throws error. you need to use loop operation 

    } 

} 

trace("folderDGDataXML" + folderDGDataXML); 
trace("folderDataXML" + folderDataXML); 
+0

嗨拉賈,感謝您的答覆。謝謝回覆。使用另一個值更改元素後,我的代碼工作正常。 – user3323357