Update xml with form

Discussion in 'Programming' started by sw1267, Dec 15, 2006.

  1. #1
    I need your help on this. I was asked to CRUD a mach-ii.xml with a form. Since it is not a normal xml file, it is difficult to manage it. Please offer your advice how this should be tackled.

    Thanks,
    Bill




    Attach Code

    <!DOCTYPE mach-ii SYSTEM "http://www.macromedia.com/xml/dtds/mach-ii_1_0.dtd">
    <mach-ii version="1.0">
    <listeners>


    <listener name="listerner1" type="cfc.component">

    <parameters>
    <parameter name="name1" value="value1" />
    <parameter name="name2" value="value2" />
    <parameter name="name3" value="value3" />
    <parameter name="name4" value="value4" />
    <parameter name="name5" value="value5" />
    </parameters>
    </listener>
    <listener name="listerner2" type="cfc.component">

    <parameters>
    <parameter name="name1" value="value1" />
    <parameter name="name2" value="value2" />
    <parameter name="name3" value="value3" />
    <parameter name="name4" value="value4" />
    <parameter name="name5" value="value5" />
    </parameters>
    </listener>
    <listener name="listerner3" type="cfc.component">

    <parameters>
    <parameter name="name1" value="value1" />
    <parameter name="name2" value="value2" />
    <parameter name="name3" value="value3" />
    <parameter name="name4" value="value4" />
    <parameter name="name5" value="value5" />
    </parameters>
    </listener>
    </listeners> ......
    </mach-ii>
     
    sw1267, Dec 15, 2006 IP
  2. sw1267

    sw1267 Peon

    Messages:
    3
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #2
    Now I can take the data out of the file. Question is how could I put it in a structure so I edit and update it. Please advice.


    <cfoutput>
    <cfloop from="1" to="#arrayLen(xml.machii.listeners.listener)#" index="i">
    #i#= #xml.machii.listeners.listener.XmlAttributes.name#
    <cfset paramLen= arrayLen(xml.machii.listeners.listener.parameters.parameter)>
    <cfdump var="#paramLen#" label="parameter">
    <ul>
    <cfloop from="1" to="#paramLen#" index="j">
    <em>#j#</em>
    Name: #xml.machii.listeners.listener.parameters.parameter[j].XmlAttributes.name#
    Value: #xml.machii.listeners.listener.parameters.parameter[j].XmlAttributes.value#<br/>
    </cfloop>
    </ul>
    </cfloop>
    <hr />
    EventHandler
    <cfloop from="1" to="#arrayLen(xml.machii.eventhandlers.eventhandler)#" index="a">
    <em>#a#:</em>
    event: #xml.machii.eventhandlers.eventhandler[a].XmlAttributes.event#<br />
    <cfif isdefined("#xml.machii.eventhandlers.eventhandler.notify.XmlAttributes.listener#")>
    listener: #xml.machii.eventhandlers.eventhandler[a].notify.XmlAttributes.listener# <br />
    </cfif>
    viewPage: =#xml.machii.eventhandlers.eventhandler[a].viewpage.XmlAttributes.name#<br /><br />
    </cfloop>
    <hr />
    <ul>pageviews
    <cfloop from="1" to="#arrayLen(xml.machii.pageviews.pageview)#" index="m">
    <li><em>#m# #xml.machii.pageviews.pageview[m].XmlAttributes.name# </em>
    =#xml.machii.pageviews.pageview[m].XmlAttributes.page#</li>
    </cfloop>
    </ul>
    </cfoutput>
     
    sw1267, Dec 16, 2006 IP
  3. sw1267

    sw1267 Peon

    Messages:
    3
    Likes Received:
    0
    Best Answers:
    0
    Trophy Points:
    0
    #3
    I am trying to add a new element to an xml file, I has 5 existing, so I am trying to add the sixth. but got an error message, anyone could help me on this?

    Thanks,

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    The index of a child element is out of range.
    There are only "5" children under this node.
    Therefore index "6" is out of the allowed range [1-5].

    The error occurred in C:\CFusionMX7\wwwroot\myfolder\addNew.cfm: line 18

    16 : newNodePos = arrayLen(variables.xml.machii.listeners.listener) + 1;
    17 : // add new node then set it's attributes
    18 : variables.xml.machii.listeners.listener[variables.newNodePos]= XMLElemNew(variables.xml,"listener");
    19 : structInsert(variables.xml.machii.listeners.listener[variables.newNodePos].XmlAttributes,"name","#form.listenerName#",1);
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    here the code:
    <cfscript>
    // get array position of next XML child to add
    newNodePos = arrayLen(variables.xml.machii.listeners.listener) + 1;
    // add new node then set it's attributes
    variables.xml.machii.listeners.listener[variables.newNodePos]= XMLElemNew(variables.xml,"listener");
    structInsert(variables.xml.machii.listeners.listener[variables.newNodePos].XmlAttributes,"name","#form.listenerName#",1);

    </cfscript>
     
    sw1267, Dec 18, 2006 IP