如何使用 python 在 Xml 的标记行内获取数据?
How to get data inside a Tag line in Xml using python?
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by ABREX Ver. 1.1.0 -->
<AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-0-3_STRICT.xsd">
<AR-PACKAGES>
<AR-PACKAGE>
<SHORT-NAME>Ecuc</SHORT-NAME>
<ELEMENTS>
<ECUC-MODULE-CONFIGURATION-VALUES>
<SHORT-NAME>Os</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-MODULE-DEF">/AUTOSAR/EcucDefs/Os</DEFINITION-REF>
<ECUC-DEF-EDITION>4.2.0</ECUC-DEF-EDITION>
<IMPLEMENTATION-CONFIG-VARIANT>VARIANT-PRE-COMPILE</IMPLEMENTATION-CONFIG-VARIANT>
<CONTAINERS>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>OsInclude</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR/EcucDefs/Os/OsInclude</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-STRING-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsInclude/OsIncludeFileName</DEFINITION-REF>
<VALUE>sample1.h</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
</PARAMETER-VALUES>
</ECUC-CONTAINER-VALUE>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>AppMode1</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR/EcucDefs/Os/OsAppMode</DEFINITION-REF>
</ECUC-CONTAINER-VALUE>
</ECUC-MODULE-CONFIGURATION-VALUES>
</ELEMENTS>
</AR-PACKAGE>
</AR-PACKAGES>
</AUTOSAR>
这是我的代码。我想从 "DEFINITION-REF" 中找到 Tag 的值,即 'DEST'='ECUC-ENUMERATION-PARAM-DEF'。但是我无法获得 'DEST' 的值。当我 运行 下面的代码时,它总是 'None'。你能提供任何解决方案吗?
代码:
import xml.etree.ElementTree as ET
import csv
fpath = 'sample1.arxml'
tree = ET.parse(fpath)
root = tree.getroot()
ns = {'ns': 'http://autosar.org/schema/r4.0'}
for param1 in root.findall('.//ns:DEFINITION-REF/', namespaces=ns):
value = param1.get('DEST')
print(value)
我使用了您共享的文件并且能够获取 DEFINITION-REF 的属性:
import xml.etree.ElementTree as ET
root = ET.parse('test.xml').getroot()
#run this, and it will list the key value pairs for DEFINITION-REF element :
for entry in root.findall(".//{http://autosar.org/schema/r4.0}DEFINITION-REF"):
print(entry.attrib)
<?xml version="1.0" encoding="UTF-8"?>
<!-- Generated by ABREX Ver. 1.1.0 -->
<AUTOSAR xmlns="http://autosar.org/schema/r4.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://autosar.org/schema/r4.0 AUTOSAR_4-0-3_STRICT.xsd">
<AR-PACKAGES>
<AR-PACKAGE>
<SHORT-NAME>Ecuc</SHORT-NAME>
<ELEMENTS>
<ECUC-MODULE-CONFIGURATION-VALUES>
<SHORT-NAME>Os</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-MODULE-DEF">/AUTOSAR/EcucDefs/Os</DEFINITION-REF>
<ECUC-DEF-EDITION>4.2.0</ECUC-DEF-EDITION>
<IMPLEMENTATION-CONFIG-VARIANT>VARIANT-PRE-COMPILE</IMPLEMENTATION-CONFIG-VARIANT>
<CONTAINERS>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>OsInclude</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR/EcucDefs/Os/OsInclude</DEFINITION-REF>
<PARAMETER-VALUES>
<ECUC-TEXTUAL-PARAM-VALUE>
<DEFINITION-REF DEST="ECUC-STRING-PARAM-DEF">/AUTOSAR/EcucDefs/Os/OsInclude/OsIncludeFileName</DEFINITION-REF>
<VALUE>sample1.h</VALUE>
</ECUC-TEXTUAL-PARAM-VALUE>
</PARAMETER-VALUES>
</ECUC-CONTAINER-VALUE>
<ECUC-CONTAINER-VALUE>
<SHORT-NAME>AppMode1</SHORT-NAME>
<DEFINITION-REF DEST="ECUC-PARAM-CONF-CONTAINER-DEF">/AUTOSAR/EcucDefs/Os/OsAppMode</DEFINITION-REF>
</ECUC-CONTAINER-VALUE>
</ECUC-MODULE-CONFIGURATION-VALUES>
</ELEMENTS>
</AR-PACKAGE>
</AR-PACKAGES>
</AUTOSAR>
这是我的代码。我想从 "DEFINITION-REF" 中找到 Tag 的值,即 'DEST'='ECUC-ENUMERATION-PARAM-DEF'。但是我无法获得 'DEST' 的值。当我 运行 下面的代码时,它总是 'None'。你能提供任何解决方案吗?
代码:
import xml.etree.ElementTree as ET
import csv
fpath = 'sample1.arxml'
tree = ET.parse(fpath)
root = tree.getroot()
ns = {'ns': 'http://autosar.org/schema/r4.0'}
for param1 in root.findall('.//ns:DEFINITION-REF/', namespaces=ns):
value = param1.get('DEST')
print(value)
我使用了您共享的文件并且能够获取 DEFINITION-REF 的属性:
import xml.etree.ElementTree as ET
root = ET.parse('test.xml').getroot()
#run this, and it will list the key value pairs for DEFINITION-REF element :
for entry in root.findall(".//{http://autosar.org/schema/r4.0}DEFINITION-REF"):
print(entry.attrib)