Mijn foto
Naam:
Locatie: Gent, Belgium

Gerrof. I mean it.

woensdag, juni 25, 2003

Ha! Het lukt! 't Is gewoon gelukt om uit die XML de jpegs te halen, ha! Nooit gedacht dat het zo simpel zou zijn. Eerst een functie definiëren voor he wegschrijven naar een file:



<cffunction name="writeBase64File" access="private">
  <cfargument name="filename" type="string" required="yes">
  <cfargument name="content" type="string" required="yes">
  <cffile action="WRITE" file="#arguments.filename#" output="#toBinary(arguments.content)#">
</cffunction>


En dan de loop over de XML, met lelijke kludge als er meer dan alleen DATA:BASE64 in het <data>-ding staat:



<cfscript>
  eventXML=xmlparse(eventXML);
  numEvents=arraylen(eventXML.xmlRoot.xmlchildren);
  request.fnInstall.installMsg("parsing eventXML took #gettickcount()-temp# ticks");
  request.fnInstall.installMsg("eventXML contains #numEvents# events");
  
  request.fnInstall.installMsg("looping over events", "head");
  temp=gettickcount();   

  for (iEvent=1; iEvent LTE numevents; iEvent=iEvent+1) {
    thisEvent=eventXML.xmlRoot.xmlChildren[iEvent];
    eventName=thisEvent.T_NAAM.xmlText;
    eventImg=thisEvent.SYS_composite_268304.data.xmlText;
    request.fnInstall.installMsg("#eventName#");
    if (len(eventImg) GT 12) {
      eventImg=right(eventImg,len(eventImg)-find("BASE64",eventImg)-5);
      eventImgName=listlast(thisEvent.SYS_composite_268304.path.xmlText,"/");
      writeBase64File("#expandpath("../products/events/images/"&eventImgName)#","#eventImg#");
      request.fnInstall.installMsg("---created file #eventImgName#");
    }
  }

 
  request.fnInstall.installMsg("looping over #numEvents# events took #gettickcount()-temp# ticks");
</cfscript>


Jawel, die ColdFusion is wel een stuk geëvolueerd sinds pakweg 1999. Het kan natuurlijk nog altijd lelijk, daar niet van:



<cfset eventXML=xmlparse(eventXML)>
<cfloop from="1" to="#arraylen(eventXML.xmlRoot.xmlchildren)#" index="i">
<cfif len(eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.data.xmlText) GT 12>
<cffile action="WRITE" file="#expandpath("../products/events/images/"&listlast(eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.path.xmlText,"/"))#" output="#toBinary(right(eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.data.xmlText,len(eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.data.xmlText)-find("BASE64",eventXML.xmlRoot.xmlChildren[iEvent].SYS_composite_268304.data.xmlText)-5))#"></cfif></cfloop>


...maar voor wie wil, kan het ook proper. En objectgeoriënteerdachtig. En al.