Python3.5环境下使用generateDS解析xml文件生成C++头文件的方法
2017-01-05 13:54
986 查看
1、安装python最新版本,这里以3.6版本为例,下载链接:https://www.python.org/downloads/release/python-360/,
在页面最下方有各种对应平台的安装包,根据自己的情况自行选择,然后根据网上其它介绍python安装的教程安装即
可。
2、安装generateDS最新版本,这里以2.24为例,下载链接:https://pypi.python.org/pypi/generateDS,注意页面上会
出现两个类型的版本,第一个“generateDS-2.24a0-py2.7.egg (md5)”,从名字可以知道,是基于Py2.7开发的,且类
型是Python Egg,说明是需要安装的。第二个generateDS-2.24a0.tar.gz (md5)“”,是基于python3.0以上版本开发
的,且类型是Source,说明无需安装,这里选择第二个进行下载,下载下来解压即可。
3、安装lxml。根据generateDS的文档说明,这个必须要的,而且从后面的使用过程中,也可以找到若没安装,在解
析时,会提示ImportError: No module named 'lxml'。lxml可以参考博客“windows 下安装 python lxml”,链接:
http://blog.csdn.net/zhaokuo719/article/details/8209496,这里将安装过程,摘录如下:
a、下载ez_setup.py文件,链接:http://download.csdn.net/detail/qq_28088659/9729502(注意:那个博客里的
下载链接提供的是python2.7版本的,我提供的是针对python3.0以上的)
b、运行改ez_setup.py文件。运行python的方式很多,控制台运行指令:python ez_setup.py
c、在系统PATH环境变量里面添加路径:如:E:\python3.6\Scripts(E:\python3.6 是python的安装路径)(注
意:这一步可以不进行,后面那一步提供完整的easy_install路径即可)
d、cmd执行:easy_install virtualenv (或:E:\python3.6\Scripts\easy_install.exe virtualenv)
e、下载lxml 链接:https://pypi.python.org/pypi/lxml/3.7.1 下载完后是一个.whl后缀的文件,(注意:那个博客
提供的下载链接是lxml2.7,比较老的,用笔者提供的新的)
e、cmd 执行 E:\python3.6\Scripts\pip.exe install XXX\lxml-3.7.1-cp35-cp35m-win_amd64.whl (注意:XXX是xml
文件的路径,此外那个博客使用的安装命令对于.whl的文件不适用,这里采用pip安装)
至此,所有的准备工作已全部完成........
二、解析XML文件
1、因为自己解析的时候,还是发现模板有的地方不明确。然后我就去看开发文档和别人学习FreeCAD的笔记,发现里面有提到,FreeCAD会在Build过程中,将XML文件生成H和CPP文件。
2、于是我去GitHub上下了最新的FreeCAD的源码文件
3、通过查看App下对应的CMakeLists.txt,借助网上CMakeLists语法规则理解了一下代码的意思。发现里面有很多调
用generate_from_xml函数,于是猜想应该是这个东西导致XML文件生成H和CPP文件的。
4、可是APP的CMakeLists.txt没有关于generate_from_xml函数的具体内容。由于CMakeLists是顺序执行的,于是我
查看在它前面的代码,发现引用了一些其它地方的文件路径,特别是CMake的文件。
5、于是我去cMake目录下,把每个.cmake文件打开,然后查找generate_from_xml函数。最后发现只有在
FreeCadMacros.cmake文件里面找到了该函数。于是我就查看这个函数的实现,发现有一句代码跟xml有关系。
6、这句代码翻译成控制台命令就是:…\python.exe ...\src\Tools\gegerate.py –outputPath ….\文件输出路径 …
\XXX.xml。于是,打开gegerate.py的代码,在App目录下找了一个xml文件,在控制台直接键入这个命令,发现很多地
方报错,主要是FreeCAD的这个代码是Py2.7的,有的函数使用在Py3.0以上不兼容。主要有这么几类:
Print -> print()
except Error, exp: -> expect Error as exp:
import template -> import 当前文件夹名. template as template
exec XX in DD,EE -> exec(XX, DD, EE)
7、解决这些因为版本的问题之后,还遗留一个代码本身的问题,错误提示为“。。。 no Flush”,我就把相应位置的
代码注释掉了。
8、接着就是从gegerate.py开始一点点,调试、读懂代码的过程了。从代码来看,gegerate.py是对处理对XML的处理
进行分流。分为XML含有Module元素和不含有Module元素的两种处理方式。这里我主要追踪了没有Module,因为大
部分的XML元素都没有Module元素。
9、gegerate.py的最后调用了…src\Tools\generateTemplates\templateClassPyExport.py文件,这个文件其实是一个
模板文件,因为它的下方很大一块,定义了头文件(TemplateHeader)、CPP文件(TemplateModule)和pyImp.CPP文件
(TemplateImplement)模板,然后,利用模板和XML文件,调用…\src\Tools\generateBase\generateTools.py进行解
析,并生成对应的H文件、CPP文件以及PyImpCPP文件(这个文件在代码里面是会先检查,如果没有,再创建的。)
10、在调试generateTools.py时,会发现生成的文件内容总是空的,网上查资料发现,
,于是添加了self.ouf.flush()代码。
至此、以上就是个人研究FreeCAD解析XML的工作机理的过程。
相关文章推荐
- 记一次项目经历——linux环境下使用libxml2实现xml文件的生成与解析
- c++生成dll使用python调用dll的方法
- VS平台简单的使用C++调用Python3.5的方法
- c++生成dll使用python调用dll的方法
- windows下使用gvim搭建简单的IDE编译环境(支持C/C++/Python等)
- 将C++代码全部写到头文件:)python脚本帮助自动生成相应的实现文件初始框架
- 转载 VC轻松解析XML文件 - CMarkup类的使用方法
- android学习——使用SAX、DOM 和 PULL 解析xml文件,及使用pull生成xml文件
- 使用doxygen从c++代码中生成文档的方法学习 .
- Windows下使用NotePad++配置C#,Python,Java,C++开发环境
- vs2010环境 c++ 使用htmlcxx解析html
- Python在C/C++代码自动生成中的使用
- 使用Dom4j解析和生成XML文件时的一些小tips
- 使用Javah 生成C/C++头文件的误区
- 使用doxygen从c++代码中生成文档的方法学习 .
- 【转】python直接生成exe的方法(使用py2exe)
- 【原】Python/C API使用方法简介 (在C/C++中嵌入Python)
- VC轻松解析XML文件--CMarkup使用方法(解决解析中文字符出现乱码问题)
- [转载]VC轻松解析XML文件 - CMarkup类的使用方法
- 使用Dom生成xml文件和解析xml文件