送“饭”来了——嘻嘻

送“饭”来了——嘻嘻

处理xml格式的文件:
  <project>
    <category>${SvnRepoName}</category>
    <name>${ModuleName}</name>
    <webURL>http://192.168.×.×/ccnet/server/local/project/${ModuleName}/ViewProjectReport.aspx</webURL>
    <workingDirectory>E:\Build\Build_Src\${ModuleName}</workingDirectory>
    <artifactDirectory>E:\Build\Build_Log\${ModuleName}</artifactDirectory>
    <externalLinks>
       <externalLink name="${ModuleName} path of put out" url="ftp://192.168.×.×/${FtpPos}" />
    </externalLinks>
    <state type="state" directory="E:\Build\Build_State" />
    <labeller type="defaultlabeller">
        <prefix></prefix>
        <incrementOnFailure>false</incrementOnFailure>
    </labeller>
    <publishers>
      <statistics>
         <statisticList />
      </statistics>
      <xmllogger logDir="E:\Build\Build_Log\${ModuleName}\buildlogs"/>
    </publishers>
    <triggers>
       <scheduleTrigger time="1:30" buildCondition="ForceBuild">
       </scheduleTrigger>
    </triggers>
    <sourcecontrol type="svn" autoGetSource="true">
                    <executable>svn</executable>
                    <username>Build</username>
       <trunkUrl>${SvnProjectPath}</trunkUrl>
       <workingDirectory>E:\Build\Build_Src\${ModuleName}</workingDirectory>               
    </sourcecontrol>
    <tasks>
      <nant>        
        <buildFile>E:\Build\Build_Src\${ModuleName}\Build\BuildFile</buildFile>
        <executable>nant</executable>        
        <logger>NAnt.Core.XmlLogger</logger>
                                <targetList>
                                    <target>${BuildTarget}</target>
                                </targetList>
        <nologo>True</nologo>
     </nant>
    </tasks>
  </project>
  
  
有一文件格式如上,想对它进行处理:
1、文件会有多个<project></project>
2、每一个<project></project>的不同之处在于${}变量值的不同
3、要通过外部变量参数值的变化修改对应的<project></project>的信息

问题:如何对该文件进行操作处理呢,,一起来分析设计下。
多个project之间区别在哪里,对于你所说的不同的project${}变量不同是什么意思?是指变量名也不一样吗?如果是这样可能通过正则式进行替换.或不考虑效率的话使用replace替换也可以.
多个project之间区别在哪里,对于你所说的不同的project${}变量不同是什么意思?
呵呵,有没有看到文件中,有一些是用${}括起来的,就是指那些的不同。

第一次要这么复杂处理这样的文件,有疑问。先处理第一个,你说是将它当作一般的文本文件来处理,还是当作xml文件来处理。
添加动作,利用模板(即存储以上文件的信息,不过,其中${}的变量用%s来代替),然后python中,用这样的形式处理
fileinfo %(SvnRepoName,ModuleName,ModuleName,ModuleName,ModuleName,ModuleName,FtpPos,ModuleName,SvnProjectPath,ModuleName,ModuleName,BuildFile,BuildTarget)。。这样的效率是不是会很低啊。。

不过,可能用正则表达式来处理,会快点。
要替换两次会低一些.可以使用 re.sub来进行替换.其中sub可以传入一个函数对替换串进行处理.
可是,我每次怎么取想要的某项project的信息,然后将信息替换完后,又将它写到原来的位置呢。
整个扫描一遍,替换完了覆盖不就行了.
覆盖??有那么多个project,,怎么确定覆盖的那个位置啊。。
简单的话就是全部覆盖,不然你只能将project解析成多段,然后处理完毕再拼成一个更写回去就行了.
我想知道,,能不能当作xml文件来处理,会更容易些。
  有没有可以,直接找到project是第几个节点,在该节点下加入更新的然后删除旧的。