一,目標(biāo):
? ? ? 汽車行業(yè)Autosar用developer工具會生成RTE接口,RTE解析中的信息,特別是data element無法導(dǎo)出查看,只能連接dangle打開developer工程才能看。我覺得不方便。
所以靠自己解析arxml則可以隨時閱讀各種信息。
二,調(diào)研:
? ?? 我要怎樣才能完成我自己目標(biāo),自己解析arxml呢?先由簡單的xml解析開始,昨天已經(jīng)自學(xué)了python3.7自帶的xml包的ET模塊,以及l(fā)xml這個第三方包(主要是xpath可以直接定位比較好用)
? ?? 還了解了xsd是xml的模板框架文件??梢杂脕眚炞Cxml,其實(shí)也可以用xsd來生成xml(這個目前對我來說有難度,我的重點(diǎn)還是在解析xml不是生成xml)
? ?? 在了解xsd的過程中發(fā)現(xiàn)了一個很好的第三方包generateDS。他可以通過xsd來生成xml解析的自動api,然后基于這些api可以做二次開發(fā)。
三,立項
? ? 當(dāng)然我自己嘗試了用lxml和xml.etree模塊解析xml,都可以用,但是要求對xml結(jié)果很熟悉,而且每次若需求不同要求解析的的內(nèi)容不同,則會帶來代碼重寫,所以不方便。于是我就將方案定為用generateDS產(chǎn)生的api進(jìn)行二次開發(fā)。
? ? 結(jié)果我做成功了。并且還能輕松的解析autosar developer中SWC模塊的arxml。同時也對xml格式以及如何閱讀xml和xsd有了更深入的了解。
四,我的源碼
?? 設(shè)計思路是先由一份swc.arxml生成了一份xsd文件,然后由xsd文件通過generateDS生成了api后進(jìn)行二次開發(fā),生成了port/interface等信息表。然后對PortInterfaces.arxml也進(jìn)行了解析,為了獲取datatype和swc生成的表拼接,否則swc表中是沒有data type信息的。
guthub路徑:https://github.com/AppleCai/Arxmlgen
效果如下:

五,環(huán)境及工具鏈搭建
5.1 xsd的使用
5.1.1. 需要安裝xsd.exe.
5.1.2. 將xml放置在exe的同一目錄
5.1.3. 創(chuàng)建一個myOutputDir作為存放生成xsd文件的文件夾
5.1.4.在此路徑運(yùn)行cmd命令,輸入如下命令,即可在myOutputDir文件夾下生成對應(yīng)的xsd文件
?? xsd.exe RTE_test_update.xml?/outputdir:myOutputDir

5.2 通過xsd生成python api的方法
5.2.1 確保python已經(jīng)安裝了generateDS-2.33.6第三方庫
安裝方法為普通第三方包的安裝方法如下
python setup.py build
python setup.py install
5.2.2 進(jìn)入此文件夾,并且將xsd文件夾copy入此文件夾。輸入如下命令,即可生成自動api
python generateDS.py -o RTE_test_update_api.py RTE_test_update.xsd
5.3 通過python api讀取xml信息進(jìn)行二次開發(fā)的方法
主處理函數(shù)如下,將silence設(shè)置為True。
所有讀取的xml信息都在rootObj對象中,可以任何獲取,繼續(xù)進(jìn)行二次開發(fā)。
