aharui commented on issue #562: Tree component in Royale can not render with a 
kind of XML data, which is working with Flex
URL: https://github.com/apache/royale-asjs/issues/562#issuecomment-554822616
 
 
   There is some interesting Flex compiler behavior.  Here is the test case I 
put together:
   
   ```
   <mx:Application xmlns:fx="http://ns.adobe.com/mxml/2009"; 
xmlns:mx="library://ns.adobe.com/flex/mx"
                  applicationComplete="runTest()">
       <fx:Script>
           <![CDATA[
               private function runTest():void
               {
                   trace("fxxmlList: " + fxxmlList.length());
                   trace("fxxmlList2: " + fxxmlList2.length());
                   //trace("fxxmlList3: " + fxxmlList3.length());
                   trace("xmlList: " + xmlList.length());
                   trace("xmlList2: " + xmlList2.length());
                   trace("xmlList3: " + xmlList3.length());
                   //trace("xmlList4: " + xmlList4.length());
                   trace("xmlList5: " + xmlList5.length());
                   //trace("xmlList6: " + xmlList6.length());
               }
               
               // String with one top node
               private var xmlList:XMLList = new XMLList(
                   '<node label="Mail Box">' +
                     '<node label="Inbox">' +
                       '<node label="Marketing"/>' +
                       '<node label="Product Management"/>' +
                       '<node label="Personal"/>' +
                     '</node>' +
                     '<node label="Outbox">' +
                       '<node label="Professional"/>' +
                       '<node label="Personal"/>' +
                     '</node>' +
                     '<node label="Spam"/>' +
                     '<node label="Sent"/>' +
                   '</node>');
               
               // String with XMLListLiteral as one top node
               private var xmlList2:XMLList = new XMLList(
                   '<>' +
                     '<node label="Inbox">' +
                       '<node label="Marketing"/>' +
                       '<node label="Product Management"/>' +
                       '<node label="Personal"/>' +
                     '</node>' +
                     '<node label="Outbox">' +
                       '<node label="Professional"/>' +
                       '<node label="Personal"/>' +
                     '</node>' +
                     '<node label="Spam"/>' +
                     '<node label="Sent"/>' +
                   '</>');
               
               // String with no top node
               private var xmlList3:XMLList = new XMLList(
                   '<node label="Inbox">' +
                     '<node label="Marketing"/>' +
                     '<node label="Product Management"/>' +
                     '<node label="Personal"/>' +
                   '</node>' +
                   '<node label="Outbox">' +
                     '<node label="Professional"/>' +
                     '<node label="Personal"/>' +
                   '</node>' +
                   '<node label="Spam"/>' +
                   '<node label="Sent"/>');
               
               /* single node is XML (not XMLList) so Flex compiler says no.
               // XMLLiteral (one top node)
               private var xmlList4:XMLList = <node label="Mail Box">
                                                <node label="Inbox">
                                                  <node label="Marketing"/>
                                                  <node label="Product 
Management"/>
                                                  <node label="Personal"/>
                                                </node>
                                                <node label="Outbox">
                                                  <node label="Professional"/>
                                                  <node label="Personal"/>
                                                </node>
                                                <node label="Spam"/>
                                                <node label="Sent"/>
                                              </node>;
               */
                           
               // XMLListLiteral as one top node
               private var xmlList5:XMLList = <>
                                                <node label="Inbox">
                                                  <node label="Marketing"/>
                                                  <node label="Product 
Management"/>
                                                  <node label="Personal"/>
                                                </node>
                                                <node label="Outbox">
                                                  <node label="Professional"/>
                                                  <node label="Personal"/>
                                                </node>
                                                <node label="Spam"/>
                                                <node label="Sent"/>
                                              </>;
               
               /* Flex compiler outputs errors about the Outbox and following 
nodes
               // XML nodes but no top node
               private var xmlList6:XMLList =  <node label="Inbox">
                                                 <node label="Marketing"/>
                                                 <node label="Product 
Management"/>
                                                 <node label="Personal"/>
                                               </node>
                                               <node label="Outbox">
                                                 <node label="Professional"/>
                                                 <node label="Personal"/>
                                               </node>
                                               <node label="Spam"/>
                                               <node label="Sent"/>
               */
           ]]>
       </fx:Script>
       <fx:Declarations>
           <!-- one top node -->
           <fx:XMLList id="fxxmlList">
               <node label="Mail Box">
                   <node label="Inbox">
                       <node label="Marketing"/>
                       <node label="Product Management"/>
                       <node label="Personal"/>
                   </node>
                   <node label="Outbox">
                       <node label="Professional"/>
                       <node label="Personal"/>
                   </node>
                   <node label="Spam"/>
                   <node label="Sent"/>
               </node>
           </fx:XMLList>
           
           <!-- no top node -->
           <fx:XMLList id="fxxmlList2">
               <node label="Inbox">
                   <node label="Marketing"/>
                   <node label="Product Management"/>
                   <node label="Personal"/>
               </node>
               <node label="Outbox">
                   <node label="Professional"/>
                   <node label="Personal"/>
               </node>
               <node label="Spam"/>
               <node label="Sent"/>
           </fx:XMLList>
           
           <!-- XMLLListLiteral as one top node
                Flex compiler says that CDATA is not allowed, so no way
                to use XMLListLiteral in fx:XMLList
           <fx:XMLList id="fxxmlList3"><![CDATA[
               <>
               <node label="Inbox">
                   <node label="Marketing"/>
                   <node label="Product Management"/>
                   <node label="Personal"/>
               </node>
               <node label="Outbox">
                   <node label="Professional"/>
                   <node label="Personal"/>
               </node>
               <node label="Spam"/>
               <node label="Sent"/>
               </>
               ]]>
           </fx:XMLList>
           -->
           
           <!-- Flex compiler says to use the CDATA like in fxxmlList3
           <fx:XMLList id="fxxmlList4">
               <>
               <node label="Inbox">
               <node label="Marketing"/>
               <node label="Product Management"/>
               <node label="Personal"/>
               </node>
               <node label="Outbox">
               <node label="Professional"/>
               <node label="Personal"/>
               </node>
               <node label="Spam"/>
               <node label="Sent"/>
               </>
           </fx:XMLList>
           -->
   
       </fx:Declarations>
   
       <mx:Label text="XMLList Test" />
   </mx:Application>
   ```
   
   The output is:
   ```
   [trace] fxxmlList: 1
   [trace] fxxmlList2: 4
   [trace] xmlList: 1
   [trace] xmlList2: 4
   [trace] xmlList3: 4
   [trace] xmlList5: 4
   ```
   
   The most interesting results for me are:
   * in fx:XMLList, you can't use XMLListLiterals but you must use them in AS.
   * in XMLList String conversion, the XMLListLiteral is essentially ignored 
and whatever else remains is the list.
   
   We will adjust Royale to match this behavior.
   
   

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
[email protected]


With regards,
Apache Git Services

Reply via email to