在 python 中使用漂亮的汤或任何其他方法解析 Autosar arxml
Parsing Autosar arxml using beautiful soup or any other method in python
我正在处理 autosar 文件,在 Autosar 中我们使用 .arxml 文件,
在下面的 arxml 文件中,我想解析一些数据(DTC 值 ex:112068)
.arxml:
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>DTC_AD</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTC</DEFINITION-REF>
<VALUE>112068</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-STRING-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTCDescription</DEFINITION-REF>
<VALUE>AD temp</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTCFunctionalUnit</DEFINITION-REF>
<VALUE>1</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
</PARAMETER-VALUES>
</ECUC-CONTAINER-VALUE>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>DTC_Lost</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTC</DEFINITION-REF>
<VALUE>126630</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-STRING-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTCDescription</DEFINITION-REF>
<VALUE>LostCOMM</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTCFunctionalUnit</DEFINITION-REF>
<VALUE>1</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
</PARAMETER-VALUES>
</ECUC-CONTAINER-VALUE>
我也试过下面的代码,但没有得到想要的输出:
from bs4 import BeautifulSoup as Soup
def diff_method():
handler = open('Dem_PRJ_8CH_EcucValues.arxml').read()
soup = Soup(handler,"html.parser")
for ecuc_container in soup.find_all('ecuc-container-value'):
for def_ref in ecuc_container.find_all('definition-ref'):
#print(def_ref.get_text())
if (def_ref.get_text() == '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTC'):
print(ecuc_container.get_text())
if __name__ == "__main__":
diff_method()
预期输出:
112068
126630
如果 handler
变量是问题中的 XML 文本,您可以使用此示例从 <value>
标签中获取值:
from bs4 import BeautifulSoup
soup = BeautifulSoup(handler, 'html.parser')
for definition in soup.select('definition-ref:has(~ value)'):
if definition.get_text(strip=True) == '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTC':
print(definition.find_next('value').text)
打印:
112068
126630
我正在处理 autosar 文件,在 Autosar 中我们使用 .arxml 文件, 在下面的 arxml 文件中,我想解析一些数据(DTC 值 ex:112068)
.arxml:
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>DTC_AD</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTC</DEFINITION-REF>
<VALUE>112068</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-STRING-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTCDescription</DEFINITION-REF>
<VALUE>AD temp</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTCFunctionalUnit</DEFINITION-REF>
<VALUE>1</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
</PARAMETER-VALUES>
</ECUC-CONTAINER-VALUE>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>DTC_Lost</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTC</DEFINITION-REF>
<VALUE>126630</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-STRING-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTCDescription</DEFINITION-REF>
<VALUE>LostCOMM</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
<ECUC-NUMERICAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-INTEGER-PARAM-DEF">/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTCFunctionalUnit</DEFINITION-REF>
<VALUE>1</VALUE>
</ECUC-NUMERICAL-PARAM-VALUE>
</PARAMETER-VALUES>
</ECUC-CONTAINER-VALUE>
我也试过下面的代码,但没有得到想要的输出:
from bs4 import BeautifulSoup as Soup
def diff_method():
handler = open('Dem_PRJ_8CH_EcucValues.arxml').read()
soup = Soup(handler,"html.parser")
for ecuc_container in soup.find_all('ecuc-container-value'):
for def_ref in ecuc_container.find_all('definition-ref'):
#print(def_ref.get_text())
if (def_ref.get_text() == '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTC'):
print(ecuc_container.get_text())
if __name__ == "__main__":
diff_method()
预期输出:
112068
126630
如果 handler
变量是问题中的 XML 文本,您可以使用此示例从 <value>
标签中获取值:
from bs4 import BeautifulSoup
soup = BeautifulSoup(handler, 'html.parser')
for definition in soup.select('definition-ref:has(~ value)'):
if definition.get_text(strip=True) == '/AUTOSAR_Dem/EcucModuleDefs/Dem/DemConfigSet/DemDTCClass/DemDTC':
print(definition.find_next('value').text)
打印:
112068
126630