vs7.1工程文件到Programmer's Notepad编辑器工程的转换

芮琛
2023-12-01
    实际上是将vs7.1的工程文件(*.vcproj)到编辑器Programmer's Notepad的工程文件(*.pnproj)转换,所需的工作量是很小的。
    最近要做毕设,需要查看eMule的源代码,但本人机了太烂没装vs200X,于是想转换到Programmer's Notepad中的工程文件来查看。eMule源代码中有大量的文件,想一个个地添加到太麻烦了,好在它们的工程文件都是xml格式的,使用xslt来软件就很容易了。
    PNotepad的工程文件格式很简单,根节点为Project,里面依次为Folder/File,都使用属性来表示相关信息。一示例如下:
  1. <Project name="hello">
  2.   <Folder name="New Folder">
  3.     <File path="AbstractFile.h"></File>
  4.     <File path="3DPreviewControl.h"></File>
  5.     <File path="AbstractFile.cpp"></File>
  6.     <File path="3DPreviewControl.cpp"></File>
  7.   </Folder>
  8. </Project>
而在vs工程文件*.vcproj中需要关注的结点是VisualStudioProject/Files,所有文件名就存放该标签里。Files下是用Filter来代表各个文件夹,其下的File标签就代表一个文件了。它们有如下简单的对应关系:
*.vcproj                           |         *.pnproj
<VisualStudioProject name="">      |         < Project   name = "hello" >
  <Files>                          |
    <Filter name="">               |           < Folder   name = "New Folder" >
      <File RelativePath="">       |             < File   path = "AbstractFile.h" >

一个xsl文件如下:
  1. <?xml version="1.0" encoding="utf-8"?>
  2. <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="2.0">
  3. <xsl:output method="text" />
  4. <xsl:template match="/">
  5. <Project>
  6. <xsl:attribute name="name"><xsl:value-of select="VisualStudioProject/@Name" /></xsl:attribute>
  7. <xsl:apply-templates select="VisualStudioProject/Files/Filter" />
  8. </Project>
  9. </xsl:template>

  10. <xsl:template match="Filter">
  11. <Folder>
  12. <xsl:attribute name="name"><xsl:value-of select="@Name" /></xsl:attribute>
  13. <xsl:apply-templates select="File" />
  14. </Folder>
  15. </xsl:template>

  16. <xsl:template match="File">
  17. <File><xsl:attribute name="path">srchybrid/<xsl:value-of select="@RelativePath" /></xsl:attribute></File>
  18. </xsl:template>

  19. </xsl:stylesheet>
需要注意的是使用浏览器进行转换时并不能看到转换后的结果,最好使用能转换xml格式的编辑器。我使用的是SharpDevelop,它是一个开源的C# IDE工具,带有xml编辑器,且提供xsl转换功能。将vs工程文件的
vcproj后缀改为xml后用 SharpDevelop打开,这时主菜单中会出一个xml菜单,其中“Assign XSLT”指定xsl文件,“Run XSLT”进行转换,转换结果会在一个新的窗口中显示出来。

    这个转换文件有一个问题是,需要考虑文件的相对位置,这可能也要在xsl文件中体现出来。上面代码中第19行最后 srchybrid/就是一个相对路径。
 类似资料: