一,目标:
汽车行业Autosar用developer工具会生成RTE接口,RTE解析中的信息,特别是data element无法导出查看,只能连接dangle打开developer工程才能看。我觉得不方便。
所以靠自己解析arxml则可以随时阅读各种信息。
二,调研:
我要怎样才能完成我自己目标,自己解析arxml呢?先由简单的xml解析开始,昨天已经自学了python3.7自带的xml包的ET模块,以及lxml这个第三方包(主要是xpath可以直接定位比较好用)
还了解了xsd是xml的模板框架文件。可以用来验证xml,其实也可以用xsd来生成xml(这个目前对我来说有难度,我的重点还是在解析xml不是生成xml)
在了解xsd的过程中发现了一个很好的第三方包generateDS。他可以通过xsd来生成xml解析的自动api,然后基于这些api可以做二次开发。
三,立项
当然我自己尝试了用lxml和xml.etree模块解析xml,都可以用,但是要求对xml结果很熟悉,而且每次若需求不同要求解析的的内容不同,则会带来代码重写,所以不方便。于是我就将方案定为用generateDS产生的api进行二次开发。
结果我做成功了。并且还能轻松的解析autosar developer中SWC模块的arxml。同时也对xml格式以及如何阅读xml和xsd有了更深入的了解。
四,我的源码
设计思路是先由一份swc.arxml生成了一份xsd文件,然后由xsd文件通过generateDS生成了api后进行二次开发,生成了port/interface等信息表。然后对PortInterfaces.arxml也进行了解析,为了获取datatype和swc生成的表拼接,否则swc表中是没有data type信息的。
guthub路径:https://github.com/AppleCai/Arxmlgen
效果如下:
五,环境及工具链搭建
5.1 xsd的使用
5.1.1. 需要安装xsd.exe.
5.1.2. 将xml放置在exe的同一目录
5.1.3. 创建一个myOutputDir作为存放生成xsd文件的文件夹
5.1.4.在此路径运行cmd命令,输入如下命令,即可在myOutputDir文件夹下生成对应的xsd文件
xsd.exe RTE_test_update.xml /outputdir:myOutputDir
5.2 通过xsd生成python api的方法
5.2.1 确保python已经安装了generateDS-2.33.6第三方库
安装方法为普通第三方包的安装方法如下
python setup.py build
python setup.py install
5.2.2 进入此文件夹,并且将xsd文件夹copy入此文件夹。输入如下命令,即可生成自动api
python generateDS.py -o RTE_test_update_api.py RTE_test_update.xsd
5.3 通过python api读取xml信息进行二次开发的方法
主处理函数如下,将silence设置为True。
所有读取的xml信息都在rootObj对象中,可以任何获取,继续进行二次开发。
网友评论