Oh *sigh* - mind the line breaks.

Ian

On Mon, Jun 22, 2009 at 6:25 PM, Ian Thomas<[email protected]> wrote:
> Hi Jason,
>  Stepping through it, it works when you break that long line of E4X
> into separate components.
>
> (For some reason people seem to want to write really long E4X
> statements - I'm not quite sure why...)
>
> Like this, your loop works.
>
> for each (var contentRowItem:XML in _contentXML..row)
> {
>   var moduleName:String = contentRowItem.Module;
>   var topicXML:XML = new XML("<topic />");
>   topicx...@title = contentRowItem.LinkTitle;
>   // This e4x creates an XMLList, so pull off the first entry
>   var module:XML=finalXML.module.(@title == moduleName)[0];
>   // Likewise
>   var 
> topics:XML=module..subsection.(@title==contentRowItem.Subsection).topics[0];
>   topics.appendChild(topicXML);
> }
>
> However - I'd include a bit of error checking for those XMLLists...
>
> for each (var contentRowItem:XML in _contentXML..row)
> {
>   var moduleName:String = contentRowItem.Module;
>   var topicXML:XML = new XML("<topic />");
>   topicx...@title = contentRowItem.LinkTitle;
>   var modulesList:XMLList=finalXML.module.(@title == moduleName);
>   if (modulesList.length()!=1)
>     throw new Error("Can't find single module with title:"+moduleName);
>
>   var topicsList:XMLList=
> modulesList[0]..subsection.(@title==contentRowItem.Subsection).topics;
>   if (topicsList.length()!=1)
>     throw new Error("Can't find single subsection with
> title:"+contentRowItem.Subsection);
>
>   topicsList[0].appendChild(topicXML);
> }
>
> My general approach to this type of stuff is: break it down. Store and
> trace out each part of your e4x statement in a separate variable, bit
> by bit. That'll show you where it's going wrong.
>
> HTH,
>   Ian
>
> On Mon, Jun 22, 2009 at 5:54 PM, Merrill,
> Jason<[email protected]> wrote:
>>
>>
>> Been wrestling with a script that transforms some XML from one schema to
>> another for a while, and have most of the transformation working, but having
>> a hard time wrapping my head around the last little bit.  Probably easy for
>> some E4X XML gurus out there.  The original XML (built automatically by the
>> sever-side app) is fairly flat and looks like this:
>>
>> (_contentXML)
>>
>> <xml>
>>
>>   <rows>
>>
>>
>>
>>     <row>
>>
>>       <ID>1</ID>
>>
>> <Module>iBuild</Module>
>>
>> <Subsection>Assumptions</Subsection>
>>
>>       <Topic>Starting iRequire</Topic>
>>
>>       <Overview>To start iRequire, you will first need to do a few things,
>> like create a user name and password.</Overview>
>>
>>       <Author>Sanders, Larry</Author>
>>
>>       …etc.
>>
>>     </row>
>>
>>
>>
>>     <row>
>>
>>       <ID>2</ID>
>>
>> <Module>iDeliver</Module>
>>
>> <Subsection>Technical Constraints</Subsection>
>>
>>         …etc.
>>
>> What I need to do, is take it from that “flat” form, and based on the values
>> of some of the nodes (<Module>,<Subsection>, and <Topic> values), make new
>> more hierarchical XML that is based on the Module, Subsection, and Topic
>> values in the XML, so that it looks like this:
>>
>> <xml>
>>
>> <modules>
>>
>>                 <module title="iPlan" orderID="5">
>>
>>                 <subsections>
>>
>>                                 <subsection title="Assumptions">
>>
>>                                         <topics>
>>
>>                                                 <topic title=”Starting
>> iRequire”>
>>
>>                                                         <overview>
>>
>>                                                                 To start
>> iRequire, you will first need to do a…
>>
>>                                                         </overview>
>>
>> <author>Sanders, Larry</author>
>>
>>                                         </topics>
>>
>>                         <subsection title="Project Information"/>
>>
>>                         </subsections>
>>
>>                 </module>
>>
>>                 <module title=”iDeliver” orderID=”6”>
>>
>>                         <subsections>
>>
>>                                 <subsection title="Assumptions"/>
>>
>>                         ..etc.
>>
>> I have it assembled this far, where the module nodes are created just fine,
>> and the subsections are appearing under the right module with the right
>> title attribute:
>>
>> (finalXML)
>>
>> <xml>
>>
>> <modules>
>>
>>                 <module title="iPlan" orderID="5">
>>
>>                 <subsections>
>>
>>                                 <subsection title="Assumptions">
>>
>>                                         <topics />
>>
>> </subsection>
>>
>>                         <subsection title="Project Information">
>>
>>                                         <topics />
>>
>> </subsection>
>>
>>                         </subsections>
>>
>>                 </module>
>>
>>                 <module title=”iDeliver” orderID=”6”>
>>
>>                         <subsections>
>>
>>                                 <subsection title="Assumptions">
>>
>> <topics />
>>
>> </subsection>
>>
>>                         <subsection title="Technical Constraints">
>>
>>                                         <topics />
>>
>> </subsection>
>>
>> <subsection title="Design Phase Documents">
>>
>>                                         <topics />
>>
>> </subsection>
>>
>> <subsection title="Implementation Phase Documents">
>>
>> <topics />
>>
>> </subsection>
>>
>>                         </subsections>
>>
>>                 </module>
>>
>>                 …etc.
>>
>> But what I can’t seem to get is that last part of how to insert the right
>> topic data under each <topics> node (Overview, ID, Author, etc).  I’d be
>> happy enough just inserting the entire original <row> node into the right
>> <topic> node.  My current attempt looks like this:
>>
>> (finalXML is my “new“ XML and _contentXML is the original XML)
>>
>> for each (var contentRowItem:XML in _contentXML..row)
>>
>> {
>>
>>         var moduleName:String = contentRowItem.Module;
>>
>>         var topicXML:XML = new XML(<topic />);
>>
>>         topicx...@title = contentRowItem.LinkTitle;
>>
>>         finalXML..module.(@title == moduleName)..subsection.(@title ==
>> contentRowItem.Subsection).topics.appendChild(topicXML)
>>
>> }
>>
>> But with this approach, I get the error, “TypeError: Error #1086: The
>> appendChild method only works on lists containing one item.” I’ve also tried
>> some forms of theNode.setChildren and so many ways to loop my head is
>> spinning. Any ideas?
>>
>> Really, my question just boils down to inserting all the right oringal
>> <row/> node(s) from the original XML as children into the new <topics/> node
>> of the new finalXML based on the Module, Subsection, and LinkTitle values
>> from the original <row> node.
>>
>>
>>
>> Any help is GREATLY appreciated!
>>
>> Jason Merrill
>>
>> Bank of  America   Global Learning
>>
>> Shared Services Solutions Development
>>
>> Monthly meetings on the Adobe Flash platform for rich media experiences -
>> join the Bank of America Flash Platform Community
>>
>> 
>


------------------------------------

--
Flexcoders Mailing List
FAQ: http://groups.yahoo.com/group/flexcoders/files/flexcodersFAQ.txt
Alternative FAQ location: 
https://share.acrobat.com/adc/document.do?docid=942dbdc8-e469-446f-b4cf-1e62079f6847
Search Archives: http://www.mail-archive.com/flexcoders%40yahoogroups.comYahoo! 
Groups Links

<*> To visit your group on the web, go to:
    http://groups.yahoo.com/group/flexcoders/

<*> Your email settings:
    Individual Email | Traditional

<*> To change settings online go to:
    http://groups.yahoo.com/group/flexcoders/join
    (Yahoo! ID required)

<*> To change settings via email:
    mailto:[email protected] 
    mailto:[email protected]

<*> To unsubscribe from this group, send an email to:
    [email protected]

<*> Your use of Yahoo! Groups is subject to:
    http://docs.yahoo.com/info/terms/

Reply via email to