>has anyone ever tried to parse a cfc/cfm file as an xml document and
>do some  processing on them?

instead of parsing the .cfc file, have you thought about using the
GetMetaData() function to programatically inspect the component? It
returns a structure, so you should be a hop, skip and jump away from an
xml document...

just my 0.02$

/t

>-----Original Message-----
>From: toru okada [mailto:[EMAIL PROTECTED] 
>Sent: Tuesday, March 01, 2005 6:44 PM
>To: CF-Talk
>Subject: Re: ArgoUML and CFC's
>
>While this is great, we wrote an xsl too for doing this as well. 
>
>One of the problems is when you change your diagram and want to
>regernerate the code it will destroy already produced code.  My
>initial thought was to read back in the cfc's as xml files and do some
>comparisons.  the problem is that cfc's are not valid xml documents.
>
>has anyone ever tried to parse a cfc/cfm file as an xml document and
>do some  processing on them?
>
>
>toru
>
>
>
>On Mon, 28 Feb 2005 12:18:03 -0800, Rob <[EMAIL PROTECTED]> wrote:
>> Ah I found it - I don't know how far I got, let me know if you want
>> more - GMail rocks :)
>> 
>> <?xml version="1.0" encoding="utf-8"?>
>> <!DOCTYPE xslt[
>>         <!ENTITY INDENT "&#x09;">
>> ]>
>> <!--
>>         Author: Rob Rohan ([EMAIL PROTECTED])
>>         File: XMItoCFC.xsl
>>         Date: 2004-10-04
>>         Purpose: To create coldfusion components from an xmi 
>(uml xml) file
>>                 it's been tested with argoUML mostly
>>         Copyright: 2004 Rob Rohan (RohanClan)
>>         License: GPL
>> -->
>> <xsl:stylesheet version="2.0"
>>         xmlns:xsl="http://www.w3.org/1999/XSL/Transform";
>>         xmlns:xs="http://www.w3.org/2001/XMLSchema";
>> >
>>         <xsl:output method="text" indent="yes" encoding="utf-8"/>
>>         <xsl:output method="text" name="textFormat"/>
>> 
>>         <xsl:strip-space elements="*"/>
>> 
>>         <!-- directory offset for class names (i.e. 
>com.bbb.bbb set this to booga. and
>>                 you'll get booga.com.bbb.bbb) end with a dot -->
>>         <xsl:param name="packageoffset" select="''" />
>>         <!-- where to start writting the cfcs (note must end 
>with a /)-->
>>         <xsl:param name="directorybase" 
>select="'file:///C:/tempcfcgen/'" />
>>         <!-- file extension... -->
>>         <xsl:param name="extension" select="'.cfc'" />
>> 
>>         <xsl:template match="/">
>>                 <xsl:apply-templates
>>                         
>select="/XMI/XMI.content/Model_Management.Model/Foundation.Core
>.Namespace.ownedElement/Foundation.Core.Class"
>>                 />
>>         </xsl:template>
>> 
>>         <!-- classes -->
>>         <xsl:template 
>match="/XMI/XMI.content/Model_Management.Model/Foundation.Core.
>Namespace.ownedElement/Foundation.Core.Class">
>>                 <xsl:variable name="fullClassName">
>>                         <xsl:call-template name="lookupFQClassName">
>>                                 <xsl:with-param name="idref" 
>select="@xmi.id" />
>>                         </xsl:call-template>
>>                 </xsl:variable>
>> 
>>                 <xsl:result-document
>> 
>href="{concat($directorybase,translate($fullClassName,'.','/'),
>$extension)}"
>> format="textFormat">
>> 
>>                 <xsl:text>&lt;cfcomponent displayname="</xsl:text>
>>                 <xsl:call-template name="lookupClassName">
>>                         <xsl:with-param name="idref" 
>select="@xmi.id" />
>>                 </xsl:call-template>
>>                 <xsl:text>"</xsl:text>
>> 
>>                 <xsl:apply-templates
>> 
>select="Foundation.Core.GeneralizableElement.generalization/Fou
>ndation.Core.Generalization"
>> />
>>                 <xsl:text>&gt;</xsl:text>
>> 
>>                 <xsl:text>&#xa;&#xa;</xsl:text>
>> 
>>                 <xsl:apply-templates
>> select="Foundation.Core.Classifier.feature/Foundation.Core.Attribute"
>> />
>>                 <xsl:text>&#xa;</xsl:text>
>>                 <xsl:apply-templates
>> select="Foundation.Core.Classifier.feature/Foundation.Core.Operation"
>> />
>> 
>>                 <xsl:text>&lt;/component&gt;</xsl:text>
>> 
>>                 </xsl:result-document>
>>                 <!-- <xsl:text>&#xa;&#xa;</xsl:text> -->
>>         </xsl:template>
>> 
>>         <!-- generalize -->
>>         <xsl:template 
>match="Foundation.Core.GeneralizableElement.generalization/Foun
>dation.Core.Generalization">
>>                 <xsl:text> extends="</xsl:text>
>>                 <xsl:call-template name="lookupGeneralization">
>>                         <xsl:with-param name="idref" 
>select="@xmi.idref" />
>>                 </xsl:call-template>
>>                 <xsl:text>"</xsl:text>
>>         </xsl:template>
>> 
>>         <!-- attributes -->
>>         <xsl:template 
>match="Foundation.Core.Classifier.feature/Foundation.Core.Attribute">
>>                 <xsl:text>&INDENT;&lt;cfproperty name="</xsl:text>
>>                 <xsl:value-of 
>select="Foundation.Core.ModelElement.name" />
>>                 <xsl:text>" type="</xsl:text>
>>                 <xsl:call-template name="lookupType">
>>                         <xsl:with-param name="idref"
>>                                 
>select="Foundation.Core.StructuralFeature.type/Foundation.Core.
>Classifier/@xmi.idref"
>>                         />
>>                 </xsl:call-template>
>>                 <xsl:text>"&gt;</xsl:text>
>>                 <xsl:text>&#xa;</xsl:text>
>>         </xsl:template>
>> 
>>         <!-- operations -->
>>         <xsl:template 
>match="Foundation.Core.Classifier.feature/Foundation.Core.Operation">
>>                 <xsl:text>&INDENT;&lt;cffuntion 
>returntype="</xsl:text>
>>                 <xsl:value-of 
>select="Foundation.Core.ModelElement.visibility/@xmi.value" />
>>                 <xsl:text>" name="</xsl:text>
>>                 <xsl:value-of 
>select="Foundation.Core.ModelElement.name" />
>>                 <xsl:text>"&gt;</xsl:text>
>>                 <xsl:text>&#xa;</xsl:text>
>>                 <xsl:apply-templates 
>select="Foundation.Core.BehavioralFeature.parameter"/>
>> 
>>                 <xsl:text>&INDENT;&lt;/cffunction&gt;</xsl:text>
>>                 <xsl:text>&#xa;&#xa;</xsl:text>
>>         </xsl:template>
>> 
>>         <!-- parameters -->
>>         <xsl:template 
>match="Foundation.Core.BehavioralFeature.parameter">
>>                 <xsl:apply-templates 
>select="Foundation.Core.Parameter"/>
>>         </xsl:template>
>> 
>>         <!-- parameter -->
>>         <xsl:template match="Foundation.Core.Parameter">
>>                 <xsl:text>&INDENT;&INDENT;&lt;cfargument 
>name="</xsl:text>
>>                 <xsl:value-of 
>select="Foundation.Core.ModelElement.name" />
>>                 <xsl:text>" type="</xsl:text>
>>                 <xsl:call-template name="lookupType">
>>                         <xsl:with-param name="idref"
>> 
>select="Foundation.Core.Parameter.type/Foundation.Core.Classifi
>er/@xmi.idref"/>
>>                 </xsl:call-template>
>>                 <xsl:text>"&gt;</xsl:text>
>>                 <xsl:text>&#xa;</xsl:text>
>>         </xsl:template>
>> 
>>         <!-- 
>///////////////////////////////////////////////////////////////
>///////////////////////////
>> -->
>>         <!-- //////////////////////////////////// NAMED TEMPLATES
>> ///////////////////////////////////// -->
>>         <!-- 
>///////////////////////////////////////////////////////////////
>///////////////////////////
>> -->
>> 
>>         <!-- lookup a data type -->
>>         <xsl:template name="lookupType">
>>                 <xsl:param name="idref" select="''" />
>>                 <xsl:value-of select="//[EMAIL PROTECTED] =
>> $idref]/Foundation.Core.ModelElement.name" />
>>         </xsl:template>
>> 
>>         <!-- lookup class name -->
>>         <xsl:template name="lookupClassName">
>>                 <xsl:param name="idref" select="''" />
>>                 <xsl:value-of select="//[EMAIL PROTECTED] =
>> $idref]/Foundation.Core.ModelElement.name" />
>>         </xsl:template>
>> 
>>         <!-- lookup namespace -->
>>         <xsl:template name="lookupNameSpace">
>>                 <xsl:param name="idref" select="''" />
>> 
>>                 <xsl:variable name="namespaceid">
>>                         <xsl:value-of select="//[EMAIL PROTECTED] =
>> 
>$idref]/Foundation.Core.ModelElement.namespace/Foundation.Core.
>Namespace/@xmi.idref"
>> />
>>                 </xsl:variable>
>> 
>>                 <xsl:value-of
>>                         
>select="concat($packageoffset,/XMI/XMI.content/Model_Management
>[EMAIL PROTECTED]
>> = $namespaceid]/Foundation.Core.ModelElement.name)"
>>                 />
>>         </xsl:template>
>> 
>>         <!-- lookup class name -->
>>         <xsl:template name="lookupFQClassName">
>>                 <xsl:param name="idref" select="''" />
>> 
>>                 <xsl:variable name="nspace">
>>                         <xsl:call-template name="lookupNameSpace">
>>                                 <xsl:with-param name="idref" 
>select="$idref" />
>>                         </xsl:call-template>
>>                 </xsl:variable>
>> 
>>                 <xsl:variable name="class">
>>                         <xsl:call-template name="lookupClassName">
>>                                 <xsl:with-param name="idref" 
>select="$idref" />
>>                         </xsl:call-template>
>>                 </xsl:variable>
>> 
>>                 <xsl:value-of select="concat($nspace,'.',$class)" />
>>         </xsl:template>
>> 
>>         <!-- lookup the class that the calling class is 
>gereralized from.
>> Meaing this is
>>                 called from child classes to get their parent
>>         -->
>>         <xsl:template name="lookupGeneralization">
>>                 <xsl:param name="idref" select="''" />
>>                 <!-- lookup the parents idref -->
>>                 <xsl:variable name="parentidref">
>>                         <xsl:value-of 
>select="//[EMAIL PROTECTED] =
>> 
>$idref]/Foundation.Core.Generalization.parent/Foundation.Core.G
>eneralizableElement/@xmi.idref"
>> />
>>                 </xsl:variable>
>> 
>>                 <xsl:variable name="nspace">
>>                         <xsl:call-template name="lookupNameSpace">
>>                                 <xsl:with-param name="idref" 
>select="$parentidref"/>
>>                         </xsl:call-template>
>>                 </xsl:variable>
>> 
>>                 <xsl:variable name="classname">
>>                         <!-- now, lookup the class name 
>using the ref -->
>>                         <xsl:call-template name="lookupClassName">
>>                                 <xsl:with-param name="idref" 
>select="$parentidref"/>
>>                         </xsl:call-template>
>>                 </xsl:variable>
>> 
>>                 <xsl:choose>
>>                         <xsl:when 
>test="string-length($nspace) &gt; 0">
>>                                 <xsl:value-of 
>select="concat($nspace,'.',$clasref"/>
>sname)" />
>>                         </xsl:when>
>>                         <xsl:otherwise>
>>                                 <xsl:value-of 
>select="concat($packageoffset,$classname)" />
>>                         </xsl:otherwise>
>>                 </xsl:choose>
>> 
>>         </xsl:template>
>> 
>>         <xsl:template match="text()" />
>> </xsl:stylesheet>
>> 
>> 
>> On Mon, 28 Feb 2005 12:14:30 -0800, Rob <[EMAIL PROTECTED]> wrote:
>> > T'was I, and I can't find it anymore :-/
>> >
>> > The book XML Cookbook 
>(http://www.oreilly.com/catalog/xsltckbk/) has
>> > an example of XML->C++ that you can modify if you want, 
>but mine was
>> > done differently than in that book. If I find it I'll pass 
>it along.
>> 
>> --
>> ~Blog~
>> http://www.robrohan.com
>> ~The cfml plug-in for eclipse~
>> http://cfeclipse.tigris.org
>> ~open source xslt IDE~
>> http://treebeard.sourceforge.net
>> 
>> 
>
>

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
Discover CFTicket - The leading ColdFusion Help Desk and Trouble 
Ticket application

http://www.houseoffusion.com/banners/view.cfm?bannerid=48

Message: http://www.houseoffusion.com/lists.cfm/link=i:4:196980
Archives: http://www.houseoffusion.com/cf_lists/threads.cfm/4
Subscription: http://www.houseoffusion.com/lists.cfm/link=s:4
Unsubscribe: 
http://www.houseoffusion.com/cf_lists/unsubscribe.cfm?user=11502.10531.4
Donations & Support: http://www.houseoffusion.com/tiny.cfm/54

Reply via email to